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