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,第二步放请求参数,
第三部放请求方式,第四步放期望结果,和拿到的数据进行对比。
当然这些都是个人想法,还没有真正的拿去实践,是否合理等,欢迎补充。
Python之TestLink篇的更多相关文章
- Python+Selenium练习篇之1-摘取网页上全部邮箱
前面已经介绍了Python+Selenium基础篇,通过前面几篇文章的介绍和练习,Selenium+Python的webUI自动化测试算是入门了.接下来,我计划写第二个系列:练习篇,通过一些练习,了解 ...
- Python人工智能第一篇:语音合成和语音识别
Python人工智能第一篇:语音合成和语音识别 此篇是人工智能应用的重点,只用现成的技术不做底层算法,也是让初级程序员快速进入人工智能行业的捷径.目前市面上主流的AI技术提供公司有很多,比如百度, ...
- Python人工智能第二篇:人脸检测和图像识别
Python人工智能第二篇:人脸检测和图像识别 人脸检测 详细内容请看技术文档:https://ai.baidu.com/docs#/Face-Python-SDK/top from aip impo ...
- 第六篇:Python函数进阶篇
在了解完了 Python函数基础篇之后,本篇的存在其实是为了整合知识,由于该篇的知识是否杂乱,故大家可以通过点开点连接直接进入其详细介绍,该篇主要大致的介绍一下几个知识点: 一.Python的迭代器 ...
- pyinstaller打包的exe太大?你需要嵌入式python玄学 探索篇
上篇我们讲到pip的安装以及普通库用pip的安装方法 CodingDog:pyinstaller打包的exe太大?你需要嵌入式python玄学 拓展篇zhuanlan.zhihu.com 问题纷沓而 ...
- pyinstaller打包的exe太大?你需要嵌入式python玄学 拓展篇
上篇我们讲到embedded版本的基础操作 CodingDog:pyinstaller打包的exe太大?你需要嵌入式python玄学 惊喜篇zhuanlan.zhihu.com 可是却没有办法用pi ...
- pyinstaller打包的exe太大?你需要嵌入式python玄学 惊喜篇
上篇讲到 pyinstaller打包exe太大的问题 CodingDog:pyinstaller打包的exe太大?你需要嵌入式python玄学 前提篇zhuanlan.zhihu.com 那既然py ...
- Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》
Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676
- 《python开发技术详解》|百度网盘免费下载|Python开发入门篇
<python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby 内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...
随机推荐
- 精通awk系列文章
精通awk系列文章 我录制了两个awk相关的视频教程: Awk经典实战案例精讲 精通awk精品课程:awk从入门到精通 1.安装新版本的gawk 2.本教程测试所用示例文件 3.铺垫知识:读取文件的几 ...
- 1-MyBatisPlus教程(一)
1,简介 官网:http://mp.baomidou.com/ 参考教程:http://mp.baomidou.com/guide/ MyBatis-Plus(简称 MP)是一个 MyBatis 的增 ...
- jQuery简单竖排手风琴折叠菜单代码
项目需求1.刚开始只显示,每个标题, 2.让每个 li列表隔行换色 3.当我点击某个标题时,下面的列表会缓慢的展开,其他列表展开的内容会收起 <!DOCTYPE html> <htm ...
- C. Game with Chips(陷阱暴力题)
\(为什么说这是个陷阱呢??\) \(因为不管你脑洞多大,数学多好,都发现会束手无策\) \(每移动一次不知道往哪个方向,不知道先访问哪个点,同时要记录所有点的坐标,记录每个点是否访问过目标点.... ...
- Northwestern European Regional Contest 2014 Gym - 101482
Gym 101482C Cent Savings 简单的dp #include<bits/stdc++.h> #define inf 0x3f3f3f3f #define inf64 0x ...
- Course Selection System ZOJ - 3956 01背包+思维
Course Selection System ZOJ - 3956 这个题目居然是一个01背包,我觉得好难想啊,根本就没有想到. 这个题目把题目给的转化为 ans = a*a-a*b-b*b 这个 ...
- 循环结构(for、while)
3.4用for语句实现循环结构 什么是循环结构 for语句 1.什么是循环结构? 循环结构又称为重复结构,是利用计算机运算速度快以及能进行逻辑控制的特点来重复执行某些操作.重复执行的部分称为循环体. ...
- Proteus传感器+气体浓度检测的报警方式控制仿真
Proteus传感器+气体浓度检测的报警方式控制仿真 目录 Proteus传感器+气体浓度检测的报警方式控制仿真 1 实验意义理解 2 主要实验器件 3 实验参考电路 4 实验中的问题思考 4.1 实 ...
- Coursera课程笔记----计算导论与C语言基础----Week 1
计算机的基本原理(Week 1) 第一次数学危机 公元前500年,毕达哥拉斯学派,他们相信数是万物的本源:一切数均可表示成整数或者整数之比 然而毕达哥拉斯证明了勾股定理,某些直角三角形的三边比不能用整 ...
- Qt之connect
Qt4之connect 基本用法 connect(ui->toolButton, SIGNAL(clicked()), this, SLOT(OnClickButton())); disconn ...