testlink可以做很多事情,如API测试参数管理,Excel导入导出,快速模板创建测试用例,集成Jenkins。
TestLink API第三方库:TestLink-API-Python-client-0.8.0 example 示例
安装 1 pip install TestLink-API-Python-client
获取xmlrpc.php地址 搜索:find -name xmlrpc.php 输出地址为:./opt/bitnami/testlink/lib/api/xmlrpc/v1/xmlrpc.php
搭建的testlink主页地址:http://localhost:8086/index.php
那这里就是
1 http://localhost:8086/lib/api/xmlrpc/v1/xmlrpc.php
不行就试试
1 http://localhost:8086/testlink/lib/api/xmlrpc/v1/xmlrpc.php
1.9.15 获取私人key 点击进入用户的页面,点击生成key按钮,生成成功后会通过邮件发送到该用户邮箱。 搜索:grep -r g_smtp_host *
需要配置testlink配置中的SMTP,否则会报错:LOCALIZE: apikey_cannot_be_reseted_invalid_smtp_hostname。
1.9.20 获取私人key 坑惨了,一直发邮件都没有收到。原来这个版本直接在个人设置中查看就行了。 点击这个小人进入到账号设置,最下面就有。 ![[Snipaste_07-07_11-44-19.png]]
获取TestlinkAPIClient对象实例 1 2 3 url = "http://11.12.13.16/lib/api/xmlrpc/v1/xmlrpc.php" key = "9f5ec9cd058457usdko2191188" tlc = testlink.TestlinkAPIClient(url, key)
获取基础信息 1 2 3 4 print(tlc.countProjects()) projects = tlc.getProjects() for project in projects: print(project)
操作测试用例集
创建用例集
无测试用例集
新建项目,未创建测试集,此时获取first level的测试集为空。
使用创建测试用例集函数createTestSuite时,最后一个参数parentid此时可以不用传输。
有测试用例集
如果是创建在项目的根上,最后一个参数parentid此时可以不用传输。
如果是创建在已有的测试用例集下面,最后一个参数parentid此时要传输为目标用例集的ID。
创建名称相同的用例集 如创建已经存在相同名称的用例集,不会报错,返回0。
创建不重复的用例集,成功后,返回结果如下:
1 2 [{'id': 68219, 'name': '', 'name_changed': False, 'status': True, 'operation': 'createTestSuite', 'additionalInfo': '', 'message': 'ok'}]
获取用例集
获取顶级用例集
1 getFirstLevelTestSuitesForTestProject(project_id)
处于顶级用例集下的用例集不会被返回,只返回(一级)标红的用例集。
获取指定用例集下的用例集
用例集下只有一个用例集
使用tlc.getTestSuitesForTestSuite(testsuite_id)返回的数据结构如下,开头不会多一个key:
1 {'id': '68596', 'details': '', 'name': '用例集2', 'node_type_id': '2', 'node_order': '1', 'parent_id': '68576'}
用例集下有多个用例集
使用tlc.getTestSuitesForTestSuite(testsuite_id)返回的数据结构如下, 前面会多一个id的key:
1 2 3 4 {'68596': {'id': '68596', 'details': '', 'name': '用例集2', 'node_type_id': '2', 'node_order': '1', 'parent_id': '68576'}, '68673': {'id': '68673', 'details': '', 'name': '用例集3', 'node_type_id': '2', 'node_order': '2', 'parent_id': '68576'}}
试了下有3个子集的,情况和2个子集相同:
1 2 3 4 5 6 7 8 9 10 用例集1 用例集2 用例集3 用例集4 {'68596': {'id': '68596', 'details': '', 'name': '用例集2', 'node_type_id': '2', 'node_order': '1', 'parent_id': '68576'}, '68673': {'id': '68673', 'details': '', 'name': '用例集3', 'node_type_id': '2', 'node_order': '2', 'parent_id': '68576'}, '68674': {'id': '68674', 'details': '', 'name': '用例集4', 'node_type_id': '2', 'node_order': '3', 'parent_id': '68576'}}
针对以上不同格式做不同处理。
操作测试用例
通过用例ID获取 1 2 3 4 5 6 7 8 def get_test_case(test_case_id): test_case = tlc.getTestCase(None, testcaseexternalid=test_case_id) for i in test_case: print ("序列", "执行步骤", "预期结果") for m in i.get("steps"): print (m.get("step_number"), m.get("actions"), m.get("expected_results")) get_test_case("auto-10") #要加上项目前缀
注意:这里的用例ID要加上项目前缀,否则获取不到
通过用例集ID获取其下所有用例 1 test_cases = self.tlc.getTestCasesForTestSuite(testsuiteid=suite_id)
如果有其他有用例集,循环获取即可
创建测试用例 源代码如下
1 def createTestCase(self, *argsPositional, **argsOptional):
参数
1 2 3 4 5 6 positional argument位置参数: testcasename :测试用例名称 testsuiteid :创建在某个测试集,该测试集的ID testprojectid :测试项目ID authorlogin :创建人姓名 summary :用例总结
可选参数:
1 2 3 4 5 6 7 8 9 10 steps :步骤,为一个list preconditions :前置条件 importance executiontype order internalid checkduplicatedname actiononduplicatedname status estimatedexecduration
创建成功返回值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [ {'operation': 'createTestCase', 'status': True, 'id': 71278, 'additionalInfo': {'id': 71278, 'external_id': '119', 'status_ok': 1, 'msg': 'ok', 'new_name': '', 'version_number': 1, 'has_duplicate': False, 'external_id_already_exists': False, 'update_name': False, 'tcversion_id': 71279}, 'message': 'Success!'} ]
external_id: 用例的ID
步骤预先定义 方法1 使用list
必须是定义好的由字典组成的列表
1 2 3 4 5 6 7 8 steps = [{'step_number' : 1, 'actions' : "action A" , 'expected_results' : "result A", 'execution_type' : 0}, {'step_number' : 2, 'actions' : "action B" , 'expected_results' : "result B", 'execution_type' : 1}, {'step_number' : 3, 'actions' : "action C" , 'expected_results' : "result C", 'execution_type' : 0}] newTestCase = self.tlc.createTestCase(........steps=steps)
方法2 使用initStep
1 2 3 4 5 该方法无需传递steps参数,已经预存在了tlc对象中 tlc.initStep("添加一个动作", "期望一个结果", 1) tlc.appendStep("添加一个动作2", "期望一个结果2", 1) tlc.appendStep("添加一个动作3", "期望一个结果3", 1) newTestCase = self.tlc.createTestCase(.......)
自定义字段 这里常用的是版本号,导入Excel的时候使用
自定义关键字 ![[Snipaste_07-08_10-52-42.png]]
获取关键字 1 tlc.listKeywordsForTC(testcase_id)
自定义字段 自定义关键字的操作方法,在编辑器中输入custom后,搜出的关键字有如下
第一个猜测是需求关键字。 get开头的获取关键字。 update开头的是更新关键字。
注意: testcaseexternalid一定要写全”au-117”,-符号不能少。
获取用例自定义字段值 1 2 3 4 5 6 getTestCaseCustomFieldDesignValue( testcaseexternalid="au-117", testprojectid="68194", customfieldname='版本号', version=1 )
这里的version没找到是指哪里,填写1就可以了。
更新用例自定义字段值 1 2 3 4 5 6 tlc.updateTestCaseCustomFieldDesignValue( testcaseexternalid="au-117", testprojectid="68194", version=1, customfields={"版本号": "6.6"} )
给用例添加自定义的关键字 先在项目的自定义关键字中添加号要用的关键字(自动添加关键字还不知道怎么添加)
给用例添加上某个关键字,直接用关键字的名称即可
1 2 3 ts = TestLinkOpr("auto") a = {"auto-68": ["测试关键字B"]} print(ts.tlc.addTestCaseKeywords(a))
创建项目关键字 研究中。。
搜索到了php添加关键字部分代码
研究不出来
可以导入关键字csv后,加上再导入,保存一份常用的关键字
用xml导入
1 2 3 4 5 6 7 8 <?xml version="1.0" encoding="UTF-8"?> <keywords> <keyword name="功能权限"><notes><![CDATA[]]></notes></keyword> <keyword name="地方都是"><notes><![CDATA[]]></notes></keyword> <keyword name="数据权限"><notes><![CDATA[]]></notes></keyword> <keyword name="附件管理"><notes><![CDATA[]]></notes></keyword> </keywords>