Skip to content

Commit dbce965

Browse files
authored
Traduction of testlink api usage
1 parent 370ced7 commit dbce965

File tree

1 file changed

+229
-0
lines changed

1 file changed

+229
-0
lines changed

doc/fr_usage.rst

Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,229 @@
1+
TestLink-API-Python-client Usage
2+
================================
3+
4+
.. contents::
5+
:local:
6+
7+
Comment communiquer avec testlink dans une interface système python
8+
-------------------------------------------
9+
10+
Se connecter à TestLink, compter les projets existants et récupérer les données d'un cas de test: ::
11+
12+
[PYENV]\testlink\Scripts\activate
13+
set TESTLINK_API_PYTHON_SERVER_URL=http://[YOURSERVER]/testlink/lib/api/xmlrpc/v1/xmlrpc.php
14+
set TESTLINK_API_PYTHON_DEVKEY=[Users devKey generated by TestLink]
15+
python
16+
>>> import testlink
17+
>>> tls = testlink.TestLinkHelper().connect(testlink.TestlinkAPIClient)
18+
>>> tls.countProjects()
19+
3
20+
>>> tls.getTestCase(None, testcaseexternalid='NPROAPI3-1')
21+
[{'full_tc_external_id': 'NPROAPI3-1', 'node_order': '0', 'is_open': '1', 'id': '2757', ...}]
22+
23+
Demander au TestLink API Client quels arguments attend une des méthodes de l'API: ::
24+
25+
import testlink
26+
tlh = testlink.TestLinkHelper()
27+
tls = tlh.connect(testlink.TestlinkAPIClient)
28+
print tls.whatArgs('createTestPlan')
29+
> createTestPlan(<testplanname>, <testprojectname>, [note=<note>], [active=<active>],
30+
[public=<public>], [devKey=<devKey>])
31+
> create a test plan
32+
33+
Générer une description de toutes les méthodes implémentées par l'API: ::
34+
35+
import testlink
36+
tlh = testlink.TestLinkHelper()
37+
tls = tlh.connect(testlink.TestlinkAPIClient)
38+
for m in testlink.testlinkargs._apiMethodsArgs.keys():
39+
print(tls.whatArgs(m), '\n')
40+
41+
Copier les cas de test
42+
---------------
43+
44+
Copier un cas de test dans une autre suite en changeant son nom::
45+
46+
>>> import testlink
47+
>>> tls = testlink.TestLinkHelper().connect(testlink.TestlinkAPIClient)
48+
>>> tc_info = tls.getTestCase(None, testcaseexternalid='NPROAPI-3')
49+
[{'full_tc_external_id': 'NPROAPI-3', ..., 'id': '5440', 'version': '2',
50+
'testsuite_id': '5415', 'tc_external_id': '3','testcase_id': '5425', ...}]
51+
>>> tls.copyTCnewTestCase(tc_info[0]['testcase_id'], testsuiteid=newSuiteID,
52+
testcasename='a new test case name')
53+
54+
Créer une nouvelle version d'un cas de test en changeant sa description et son importance::
55+
56+
>>> import testlink
57+
>>> tls = testlink.TestLinkHelper().connect(testlink.TestlinkAPIClient)
58+
>>> tc_info = tls.getTestCase(None, testcaseexternalid='NPROAPI-3')
59+
[{'full_tc_external_id': 'NPROAPI-3', ..., 'id': '5440', 'version': '2',
60+
'testsuite_id': '5415', 'tc_external_id': '3','testcase_id': '5425', ...}]
61+
>>> tls.copyTCnewVersion(tc_info[0]['testcase_id'], summary='new summary',
62+
importance='1')
63+
64+
65+
Par défaut, la dernière version d'un cas de test sera utilisée pour la copie.
66+
Si une autre version doit être copiée, il est possible de spécifier la version
67+
attendue en tant que deuxième argument. Example::
68+
69+
>>> tls.copyTCnewTestCase(tc_info[0]['testcase_id'], 1, testsuiteid=newSuiteID,
70+
testcasename='a new test case name')
71+
>>> tls.copyTCnewVersion(tc_info[0]['testcase_id'], 1, summary='new summary',
72+
importance='1')
73+
74+
Rapporter les résultats du test
75+
-------------------
76+
77+
En utilisant la classe TestlinkAPIClient - exemple d'un cas de test échoué
78+
sans auteur (l'argument 'user' n'est utilisable qu'à partir d'une version
79+
de TestLink de 1.9.10 ou supérieure):
80+
81+
>>> import testlink
82+
>>> tls = testlink.TestLinkHelper().connect(testlink.TestlinkAPIClient)
83+
>>> tls.reportTCResult(a_TestCaseID, a_TestPlanID, 'a build name', 'f',
84+
'some notes',
85+
user='a user login name', platformid=a_platformID)
86+
87+
88+
En utilisant la classe TestlinkAPIGeneric - exemple d'un cas de test passé
89+
en utilisant un auteur (argument 'user'):
90+
91+
>>> import testlink
92+
>>> tls = testlink.TestLinkHelper().connect(testlink.TestlinkAPIGeneric)
93+
>>> tls.reportTCResult(a_TestPlanID, 'p', testcaseid=a_TestCaseID,
94+
buildname='a build name', notes='some notes',
95+
user='a login name', platformid=a_platformID)
96+
97+
98+
En utilisant la classe TestlinkAPIGeneric - exemple d'un cas de test bloqué
99+
sans auteur
100+
101+
>>> import testlink
102+
>>> tls = testlink.TestLinkHelper().connect(testlink.TestlinkAPIGeneric)
103+
>>> exTCID = tls.getTestCase(testcaseid=a_TestCaseID)[0]['full_tc_external_id']
104+
>>> tls.reportTCResult(a_TestPlanID, 'b', testcaseexternalid=exTCID,
105+
buildid='a build name', platformname='a platform name')
106+
107+
Rapport de résultats de tests avec horodatage et résultat des étapes
108+
--------------------------------------------------
109+
110+
Ce résultat de test utilise son id externe (testcaseexternalid), et non l'id interne (testcaseid)
111+
112+
- Les arguments 'execduration' et 'timestamp' requièrent une version de
113+
TestLink de 1.9.14 ou supérieure
114+
- L'argument 'steps' requiert une version de TestLink de 1.9.15 ou supérieure
115+
116+
>>> import testlink
117+
>>> tls = testlink.TestLinkHelper().connect(testlink.TestlinkAPIClient)
118+
>>> tls.reportTCResult(None, newTestPlanID_A, None, 'f', '', guess=True,
119+
testcaseexternalid=tc_aa_full_ext_id, platformname=NEWPLATFORM_A,
120+
execduration=3.9, timestamp='2015-09-18 14:33',
121+
steps=[{'step_number' : 6, 'result' : 'p', 'notes' : 'result note for passed step 6'},
122+
{'step_number' : 7, 'result' : 'f', 'notes' : 'result note for failed step 7'}] )
123+
124+
Envoyer des pièces jointes
125+
------------------
126+
127+
Télécharger des pièces jointes peut être fait de deux différentes manières:
128+
129+
Avec un descripteur de fichier :
130+
131+
a_file_obj=open(CHEMIN_VALIDE_VERS_LE_FICHIER)
132+
newAttachment = myTestLink.uploadExecutionAttachment(a_file_obj, A_Result_ID,
133+
'Attachment Title', 'Attachment Description')
134+
135+
136+
Ou avec un chemin de fichier :
137+
138+
a_file_path=A_VALID_FILE_PATH
139+
newAttachment = myTestLink.uploadExecutionAttachment(CHEMIN_VALIDE_VERS_LE_FICHIER, A_Result_ID,
140+
'Attachment Title', 'Attachment Description')
141+
142+
Lister les mots-clés
143+
-------------
144+
145+
En utilisant une méthode de l'API (classe TestlinkAPIGeneric) -
146+
Lister les mots-clés de tous les cas de test d'une suite:
147+
148+
>>> import testlink
149+
>>> tls = testlink.TestLinkHelper().connect(testlink.TestlinkAPIClient)
150+
>>> ts_kw = tls.getTestCasesForTestSuite(SuiteID, False, 'full', getkeywords=True)
151+
152+
153+
En utilisant une méthode de l'API (classe TestlinkAPIGeneric) -
154+
Lister tous les mots clés d'une suite de test et ses sous-suites
155+
156+
>>> ts_kw = tls.getTestCasesForTestSuite(SuiteID, True, 'full', getkeywords=True)
157+
158+
En utilisant une méthode du service (classe TestlinkAPIClient) -
159+
Lister tous les mots clés sans ses détails pour un cas de test
160+
161+
>>> tc_kw = tls.listKeywordsForTC(5440)
162+
>>> tc_kw = tls.listKeywordsForTC('NPROAPI-3')
163+
164+
En utilisant une méthode du service (classe TestlinkAPIClient) -
165+
Lister tous les mots clés sans ses détails pour tous les cas de test d'une suite
166+
167+
>>> ts_kw = tls.listKeywordsForTS('5415')
168+
169+
170+
Lancement d'un exemple
171+
------------
172+
173+
Pour lancer l'exemple "comment utiliser la classe TestlinkAPIClient", en
174+
spécifiant les paramètres de connexion en tant qu'arguments de ligne de commande [1]_: ::
175+
176+
[PYENV]\testlink\Scripts\activate
177+
python example\TestLinkExample.py
178+
--server_url http://[YOURSERVER]/testlink/lib/api/xmlrpc.php
179+
--devKey [Users devKey generated by TestLink]
180+
181+
Pour lancer l'exemple "comment utiliser la classe TestlinkAPIGeneric", en
182+
spécifiant les paramètres de connexion en tant que variable d'environment [2]_: ::
183+
184+
[PYENV]\testlink\Scripts\activate
185+
set TESTLINK_API_PYTHON_SERVER_URL=http://[YOURSERVER]/testlink/lib/api/xmlrpc/v1/xmlrpc.php
186+
set TESTLINK_API_PYTHON_DEVKEY=[Users devKey generated by TestLink]
187+
python example\TestLinkExampleGenericApi.py
188+
189+
.. [1] TestLinkExample.py creates a new test project NEW_PROJECT_API-[CountProjects+1].
190+
.. [2] TestLinkExampleGenericApi.py creates a new test project PROJECT_API_GENERIC-[CountProjects+1].
191+
192+
Lancer des tests unitaires
193+
-------------
194+
195+
Lancer des tests unitaires avec interaction du serveur de TestLink: ::
196+
197+
[PYENV]\testlink\Scripts\activate
198+
set TESTLINK_API_PYTHON_SERVER_URL=http://[YOURSERVER]/testlink/lib/api/xmlrpc.php
199+
set TESTLINK_API_PYTHON_DEVKEY=[Users devKey generated by TestLink]
200+
cd test\utest
201+
python -m unittest discover -s test\utest-online
202+
203+
Lancer des tests unitaires sans interaction du serveur de TestLink: ::
204+
205+
[PYENV]\testlink\Scripts\activate
206+
cd test\utest
207+
python -m unittest discover -s test\utest-offline
208+
209+
En deca de Py26, unittest2_ doit être utilisé.
210+
211+
.. _unittest2: https://pypi.python.org/pypi/unittest2
212+
213+
214+
Comment accéder aux données originelles d'échange de XML
215+
------------------------------------------
216+
217+
Si pour des raisons de débogage les versions originelles d'échange de XML sont requises,
218+
il est possible d'initialiser l'API client avec le paramètre optionnel *verbose* mis à *True*: ::
219+
220+
>>> tlh = testlink.TestLinkHelper()
221+
>>> tls = testlink.TestlinkAPIClient(tlh._server_url, tl._devkey, verbose=True)
222+
send: b"POST /testlink/lib/api/xmlrpc/v1/xmlrpc.php HTTP/1.1\r\nHost: ...
223+
<?xml version='1.0'?>\n<methodCall>\n<methodName>tl.getUserByLogin</methodName>\n<params>...</params>\n</methodCall>\n"
224+
reply: 'HTTP/1.1 200 OK\r\n'
225+
header: Date header: Server header: ... body: b'<?xml version="1.0"?>\n<methodResponse>\n <params> ...'
226+
body: b'</name><value><string>1</string></value></member>\n</struct></value>\n <value><struct>\n ...'
227+
body: b'... </params>\n</methodResponse>\n'
228+
229+

0 commit comments

Comments
 (0)