
正文
Python之TestLink篇
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如何让时间变慢?

你们不知道吧,这个时候翻开书,时间又变慢了一倍,可以这样延年益寿,哈哈哈
—————————————————————————————————————————————————————————————————————————
回归正题
TestLink是一款基于web的测试用例管理系统,功能对于测试来讲挺齐全,例如
*测试项目管理
*产品需求管理
*测试用例管理
*测试计划管理
*测试用例的创建、管理和执行
*测试报告
好奇怪,讲那么多有点干嘛,我又不是卖软件的。
1.安装testlink第三方模块
`pip3 install -i https://pypi.doubanio.com/simple/ TestLink-API-Python-client`
2.Python连接上testlink
获取testlink秘钥,用于做python和testlink之间进行连接。
1.登陆testlink
2.点击我的设置
3.找到api接口,点击生成,复制下来即可,替换到下方代码中
import testlink# 此处请将192.168.0.233/testlink替换为自己TestLink的访问地址即可
url = "http://192.168.0.233/testlink/lib/api/xmlrpc/v1/xmlrpc.php"
# 此处将密钥更换为个人秘钥即可
key = "6250b9d9cb5fc7c982c4c35adffaaf52"
tlc = testlink.TestlinkAPIClient(url, key)
print(tlc)
此时打印出的tlc就能看到作者和版本的一些信息
3.获取Testlink中的内容及执行测试
此处要注意,在TestLink中创建的工程必须要将工程的活动和公共勾选上,不然你会发现你的代码获取不到TestLink中的数据
下方代码中的所有参数,例如id,url,秘钥,projectname都要替换成自己testlink中真是存在的参数
一下仅为演示
import testlink
import re# 此处请将192.168.0.233替换为自己TestLink的访问地址即可
url = "http://192.168.0.233/testlink/lib/api/xmlrpc/v1/xmlrpc.php"# 此处将密钥更换为个人秘钥即可
key = "6250b9d9cb5fc7c982c4c35adffaaf52"
tlc = testlink.TestlinkAPIClient(url, key)# 获取TestLink下所有的项目 返回为包含字典的列表
projects = tlc.getProjects()
print("projects.....%s" % projects)# 通过项目名称获取项目id 项目名称存在返回项目id,不存在则返回-1
ProjectID = tlc.getProjectIDByName("BB04Pfpga")
print("ProjectID.....%s" % ProjectID)# 通过项目id获取项目下的测试计划 返回嵌套字典的列表 如果工程id不存在 则抛出TLResponseError异常
ProjectTestPlans = tlc.getProjectTestPlans("40753")
print("ProjectTestPlans.....%s" % ProjectTestPlans)# 通过测试计划id返回 该计划下的所有套件
# 此处要将计划设置为活动和打开
TestSuite = tlc.getTestSuitesForTestPlan("56327")
print("TestSuite.....%s" % TestSuite)
"""
getTestCasesForTestSuite:获取测试套件下的用例
testsuiteid:测试套件id
deep:默认为True,为True时会返回子级套件下的用例
details:默认为simple,当更改参数为full时,会返回用例的详细内容
return:返回嵌套字典的列表,用例的详细内容
"""
Cases = tlc.getTestCasesForTestSuite(testsuiteid="42960", deep=True, details="simple")
print("Cases.....%s" % Cases)# 获取测试计划下的版本信息 返回为嵌套字典的列表
version = tlc.getBuildsForTestPlan("56327")
print("version.....%s" % version)
"""
getTestCasesForTestPlan:获取测试计划下对应版本的caseID
testplanid:测试计划id
buildid:测试计划下版本id
return:用例一些主要信息,例如caseID,case_name,external_id等
"""
TestCases = tlc.getTestCasesForTestPlan(testplanid="56327", buildid="85")# 此时获取到了用例的所有信息,取出用例ID
"""
此时获取到了用例的所有信息,获取到的结果中,
execution_type值为1表示手工
execution_type值为2表示自动
此时取出所有自动的caseID,保存下来
"""
auto_caseID = []
for case_id, describe in TestCases.items():
if describe[0]['execution_type'] == '2':
auto_caseID.append(case_id)# 通过getTestCase方法获取所有自动的用例的详细信息
# 传入参数为用例的ID
for ID in auto_caseID:
detailed_cases = tlc.getTestCase(ID)
# print(detailed_cases)"""
获取一条用例的详细信息,用例中包含用例的每一个步骤,用例
的编写者,状态,期望结果,名称等信息
此时获取所有自动的步骤,及期望结果
execution_type值为1表示手工
execution_type值为2表示自动
"""
detailed_cases = tlc.getTestCase("42811")
print(detailed_cases)
for item in detailed_cases:
for step in item['steps']:
if step['execution_type'] == '2':
print(f"actions:{step['actions']}......expected_results:{step['expected_results']}")# 发送测试结果到TestLink中
"""
参数为
caseID
测试计划ID
第4个参数 p为通过,f为不通过
最后一个参数为版本id
"""
tlc.reportTCResult("52191", "56001", None, 'p', "", guess=True, platformname="", buildid="66")
——————————————————————————————————————————————————————————————————————
在上方获取用例步骤初打印出来的信息你会发现包含一些html的标签
使用re和replace进行替换即可
def data_handle(data):
"""
用于处理从testlink中获取的数据进行处理
:param data: 传入的数据
:return: 返回数据为处理后的数据
"""
data = data.replace('\r', '')
data = data.replace('\t', '')
data = data.replace('\n', '')
data = data.replace(' ', ' ') # 替换空格
data = data.replace('’', '"') # 转换中文单引号 ’为英文的 "
data = data.replace('‘', '"') # 转换中文单引号‘ 为英文的 "
data = data.replace('“', '"') # 转换中文双引号“ 为英文的 "
data = data.replace('”', '"') # 转换中文双引号 ” 为英文的 "
data = data.replace(':', ":") # 转换中文的冒号 :为英文的冒号 :
data = data.replace(',', ',') # 转换中文的逗号 ,为英文的逗号 ,
data = data.replace('"', '\"') # 转换 " 为双引号
data = data.replace(''', '\'') # 转换 ' 为单引号
data = data.replace('{', '{') # 转换中文{ 为英文的 {
data = data.replace('}', '}') # 转换中文 } 为英文的 }
data = data.replace('<', '<') # 转换 < 为 <
data = data.replace('>', '>') # 转换 >为 >
data = data.replace('&', '&')
data = data.replace('【', '[')
data = data.replace('】', ']')
# 查找类似这类内容 </pre>、</div> 并替换为空
result_list = re.findall('</.?>', data)
if result_list:
for item in result_list:
data = data.replace(item, '')
# 查找类似这类内容 <pre style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:12pt;"> 并替换为空
result_list = re.findall('<.?[^<]*>', data)
if result_list:
for item in result_list:
data = data.replace(item, '') data = data.lstrip() return data# 此处整理了一下 没有进行封装,只是单纯的获取所有的用例步骤及期望结果
url = "http://192.168.0.233/testlink/lib/api/xmlrpc/v1/xmlrpc.php"
key = "6250b9d9cb5fc7c982c4c35adffaaf52"
tlc = testlink.TestlinkAPIClient(url, key)
TestCases = tlc.getTestCasesForTestPlan(testplanid="56327", buildid="85")
auto_caseID = []
for case_id, describe in TestCases.items():
if describe[0]['execution_type'] == '2':
auto_caseID.append(case_id)
for ID in auto_caseID:
detailed_cases = tlc.getTestCase(ID)
for item in detailed_cases:
for step in item['steps']:
if step['execution_type'] == '2':
action = data_handle(step['actions'])
expected_result = data_handle(step['expected_results'])
print(f"action:{action}......expected_result:{expected_result}")
tlc.reportTCResult("52191", "56001", None, 'p', "", guess=True, platformname="", buildid="66")
此时已经建立连接TestLink,获取项目,计划,套件,版本,筛选出自动的用例数据和期望结果,以及执行测试,发送测试结果。
每一层都是嵌套的关系,一个项目可以有多个计划,一个计划下又可以有多个版本。
我们已经拿到了数据,期望结果能做什么事呢?
- ui自动化
它就很适合用这个结构,每一步可以有期望结果,可以没有,查找到对应的元素后,在界面中找到一些关
键字等信息,进行验证,验证这条是否成功。 - 接口自动化
将接口地址,请求参数,请求方式,返回结果,定义一个固定的步骤,第一步放url,第二步放请求参数,
第三部放请求方式,第四步放期望结果,和拿到的数据进行对比。







