2016-08-16 3 views
1

Я ищу использовать Robot Framework для тестирования приложений .NET, и я изо всех сил пытаюсь понять, как Robot Framework может создавать объекты C#, которые будут использоваться при тестировании.Создание экземпляра объекта C# в Robot Framework

C# приложение я играю с очень прост:

SystemUnderTest solution 
|_ DataAccess project (uses Entity Framework to connect to database) 
| |_ SchoolContext class 
| 
|_ Models project 
    |_ Student class 
| 
|_ SchoolGrades project (class library) 
    |_ SchoolRoll class 
     |_ AddStudent(Student) method 

Я хотел выполнить метод AddStudent от Robot Framework, передавая объект Student, который должен быть сохранен в базе данных.

Я написал тестовую библиотеку в Python, который использует Python for .NET (pythonnet) для вызова приложения .NET:

import clr 
import sys 

class SchoolGradesLibrary (object): 

    def __init__(self, application_path, connection_string): 

     self._application_path = application_path 
     sys.path.append(application_path) 

     # Need application directory on sys path before we can add references to the DLLs. 
     clr.AddReference("SchoolGrades") 
     clr.AddReference("DataAccess") 
     clr.AddReference("Models") 

     from SchoolGrades import SchoolRoll 
     from DataAccess import SchoolContext 
     from Models import Student 

     context = SchoolContext(connection_string) 
     self._schoolRoll = SchoolRoll(context) 

    def add_student(self, student): 

     self._schoolRoll.AddStudent(student) 

Вызов этого из Python работает:

from SchoolGradesLibrary import SchoolGradesLibrary 
import clr 

application_path = r"C:\...\SchoolGrades\bin\Debug" 
connection_string = r"Data Source=...;Initial Catalog=...;Integrated Security=True" 

schoolLib = SchoolGradesLibrary(application_path, connection_string) 

# Have to wait to add reference until after initializing SchoolGradesLibrary, 
# as that adds the application directory to sys path. 
clr.AddReference("Models") 
from Models import Student 

student = Student() 
student.StudentName = "Python Student" 
schoolLib.add_student(student) 

Я немного потерял в как сделать то же самое с Robot Framework. Это то, что я получил до сих пор:

*** Variables *** 
${APPLICATION_PATH} = C:\...\SchoolGrades\bin\Debug 
${CONNECTION_STRING} = Data Source=...;Initial Catalog=...;Integrated Security=True 

*** Settings *** 
Library SchoolGradesLibrary ${APPLICATION_PATH} ${CONNECTION_STRING} 

*** Test Cases *** 
Add Student To Database 
    ${student} =   Student 
    ${student.StudentName} = RF Student 
    Add Student   ${student} 

При запуске этого он терпит неудачу с сообщением об ошибке: No keyword with name 'Student' found.

Как я могу создать объект Student в Robot Framework, чтобы перейти к Add Студенческого ключевому слову ? Есть ли что-то еще, что явно не соответствует тесту?

Приложение C# написано на .NET 4.5.1, версия Python - 3.5, а версия Robot Framework - 3.0.

ответ

2

Возможно, вы не можете напрямую создать Student в роботе без вспомогательной утилиты, так как Student - это класс, а не ключевое слово.

Самое простое решение заключается в создании ключевого слова в SchoolGradesLibrary, который создает студента:

... 
import clr 
clr.AddReference("Models") 
from Models import Student 
... 

class SchoolGradesLibrary (object): 
    ... 
    def create_student(name=None): 
     student = Student() 
     if name is not None: 
      student.StudentName = name 
     return student 
    ... 

Вы могли бы использовать, что в тестовом случае как обычный ключевое слово.

${student}= create student Inigo Montoya 
+0

Работал как очарование, спасибо. –