1 from logging import Logger
2 from suds.xsd.doctor import Import, ImportDoctor
3 import suds
4 from SoapRequestor import SoapRequestor
5 from warnings import warn
6 from html2text import HTML2Text
7 from tlib.conftest import prj_config
8
9
11 """
12 Helper class to connect and manipulate the data in SpiraTest
13 """
14
15 client = None
16 my_soap = None
17 _tests = None
18 _logger = None
19
20 _username = prj_config.get("spira", "username")
21 _password = prj_config.get("spira", "password")
22
24 """
25 Constructor for class
26
27 @param logger: instance of a logging object configured in testing project
28 @type logger: Logger
29 """
30 self._logger = logger
31 wsdl_file = "http://spirateam.ypg.com/Services/v4_0/ImportExport.svc?wsdl"
32 schema_url = 'http://schemas.microsoft.com/2003/10/Serialization/Arrays'
33 schema_import = Import(schema_url)
34 schema_doctor = ImportDoctor(schema_import)
35
36 self.my_soap = SoapRequestor(self._logger, wsdl_file, schema_doctor)
37
39 """
40 Authenticates client with SpiraTest.
41
42 @return: if connection was successful
43 @rtype: bool
44 """
45 warn("This method is Deprecated; you may want to update it use connect() instead.", DeprecationWarning)
46 self.connect()
47
49 """
50 Authenticates client with SpiraTest.
51
52 @return:if connection was successful
53 @rtype: bool
54 """
55
56 result = False
57 try:
58 result = self.my_soap.client.service.Connection_Authenticate(self._username, self._password)
59 except suds.WebFault, e:
60 self._logger.error(str(e))
61
62 self._logger.info("The connection to Spira returned :" + str(result))
63
64 return result
65
66 - def update_test_case(self, project_id, test_case_id, test_start, test_end, test_status_id, runner_msg,
67 stack_trace, test_set_id):
68 """
69 Updates a specified test cases with a specified projects Automation test set with the results of the test execution
70
71 @param project_id: Unique project id from within SpiraTest
72 @type project_id: int
73 @param test_case_id: Unique test case id from within SpiraTest
74 @type test_case_id: int
75 @param test_start: Time at which the test case started its execution. Doesn't seem to affect Spiratest.
76 @type test_start: datetime
77 @param test_end: Time at which the test case ended its execution. Doesn't seem to affect Spiratest.
78 @type test_end: datetime
79 @param runner_msg: Parameters that were used in test execution
80 @type runner_msg: str
81 @param stack_trace: Error message returned from failed test cases
82 @type stack_trace: str
83
84 """
85
86 self.my_soap.client.service.TestRun_RecordAutomated2(self._username, self._password, project_id, None,
87 test_case_id, None, test_set_id, None, None, test_start,
88 test_end, test_status_id, "None", None, 1,
89 runner_msg, stack_trace, 1)
90
92 """
93 Gets the Unique prject id from spiratest for a given project name. Name comes from project's config file
94
95 @param proj_name: Name of project under test
96 @type proj_name: str
97
98 @return: project id
99 @rtype: int
100 """
101
102 self.my_soap.client.service.Connection_Authenticate(self._username, self._password)
103 project_list = self.my_soap.client.service.Project_Retrieve()
104
105 project = (proj for proj in project_list[0] if proj["Name"] == proj_name).next()
106 self._logger.info("Project Id returned is " + str(project.ProjectId))
107
108 return project.ProjectId
109
111 """
112 Fetches a list of test cases for a given test set id in SpiraTest and stores them in class var "tests"
113
114 @param test_set_id: Automation test set id from Spiratest for project under test
115 @type test_set_id: int
116 @param proj_id: project id from Spiratest for project under test
117 @type proj_id: int
118 """
119
120 self.my_soap.client.service.Connection_Authenticate(self._username, self._password)
121 self.my_soap.client.service.Connection_ConnectToProject(proj_id)
122 test_set = self.my_soap.client.service.TestCase_RetrieveByTestSetId(test_set_id)
123 self._tests = test_set[0]
124
126 """
127 Gets the unique test case id from SpiraTest for the test case name supplied
128
129 @param test_name: Test case name found in SpiraTest and used in test case decorated to label
130 automated test_support
131 @type test_name: str
132
133 @return: test case id
134 @rtype: int
135 """
136
137 my_test = (test for test in self._tests if test["Name"] == test_name).next()
138
139 return my_test.TestCaseId
140
142 """
143 Gets the Test Steps for a Test Case
144
145 @param test_case_id: Test Case ID from the SpiraTest
146 @type test_case_id: int
147
148 @return: test steps including Test Description. Expected Results and Test Data
149 @rtype: list
150 """
151 arr_test_steps = []
152
153 test_steps = self.my_soap.client.service.TestCase_RetrieveById(test_case_id)
154
155
156 last_test_step = len(test_steps.TestSteps[0])
157
158 for i in range(last_test_step):
159 arr_test_steps.extend([test_steps.TestSteps[0][i].Description, test_steps.TestSteps[0][i].ExpectedResult,
160 test_steps.TestSteps[0][i].SampleData])
161
162 return arr_test_steps
163
165 """
166 Gets the Expected Result of the last Test Step for a test case
167
168 @param test_case_id: Test Case ID from the SpiraTest
169 @type test_case_id: int
170
171 @return: expected test step result in plain text
172 @rtype: str
173 """
174
175 test_steps = self.get_test_steps(test_case_id)
176
177 expected_result_of_last_step = test_steps[-2]
178
179
180 handler = HTML2Text()
181 expected_result = handler.handle(expected_result_of_last_step)
182
183 return expected_result
184