Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(二)

简介: 本文通过数据类型转换和文件读取的练习,复习了Python中的数据类型、循环、条件判断、内置函数等基础知识,并演示了如何将字符串数据转换为字典列表,以及如何从文本文件中读取和转换数据。

前言

练习第一篇已经结束,作者也是温故而知新。再接再厉,第二篇练习开始:

练习

数据类型转换1

现在有以下数据, li1 = ["{‘a’:11,‘b’:2}","[11,22,33,44]"]

需要转换为以下格式: li2 = [{‘a’:11,‘b’:2},[11,22,33,44]]

分析

这个十分简单,照顾一下小白,先来一场分析:转换前后的数据类型仍是list,只是里面元素的数据类型发生了改变,由字符串转成它原来的数据类型

  • 常用技能可迭代数据类型遍历及eval()函数
# 测试数据
li1 = ["{'a':11,'b':2}","[11,22,33,44]"] 

li2=[]
for data in li1:
    li2.append(eval(data))


print(li2) # 输出:[{'a':11,'b':2},[11,22,33,44]]
数据类型转换2

有一组用例数据如下:

cases = [
    ['case_id', 'case_title', 'url', 'data', 'excepted'],
    [1, '用例1', 'www.baudi.com', '001', 'ok'],
    [4, '用例4', 'www.baudi.com', '002', 'ok'],
    [2, '用例2', 'www.baudi.com', '002', 'ok'],
    [3, '用例3', 'www.baudi.com', '002', 'ok'],
    [5, '用例5', 'www.baudi.com', '002', 'ok'],
]
  • 这个相较前面的基础而言有点复杂,也算是提前剧透:可以看到cases列表数据的第1个元素,它是表头,与之对应的就是title的数据,这是为后面的接口测试用例设计的数据格式做铺垫。
要求一:把上述数据转换为以下格式
res= [
    {'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 'data': '001', 'excepted': 'ok'},
    {'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}
]
  • 遍历少不了,结果除去表头的数据与表头形成一个个字典数据类型,这样方便取值,读到同一行同一列的数据都用同样的key。
lis_d = []
for i in range(1, len(cases)):
    dic = {
   }
    for j in range(len(cases[0])):
        dic[cases[0][j]] = cases[i][j]
    lis_d.append(dic)
  • 换一个解法:
res1 = []
for value in cases[1:]:
    # 将遍历的value和key进行聚合打包,并转换为字典
    temp_res = dict(zip(cases[0], value))
    res1.append(temp_res)
  • 总结:两个解法得到的结果一样,但是从效率上看第二个解法应该高一些,就从使用了python的内置函数和少了一层for循环,姑且这样推断吧,从代码结构上看,第二个解法的代码结构也比较清晰:dict将zip打包的两个列表数据,转成字典数据类型。
要求二:把上面转换好的数据中case_id大于3的用例数据获取出来,得到如下结果
res= [
    {
   'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 'data': '001', 'excepted': 'ok'},
    {
   'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {
   'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {
   'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {
   'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}
]
  • 解法一:遍历所有元素,条件判断id大于3的数据组成新的列表
res1 = []
for i in lis_d:
    if i['case_id'] > 3:
        res1.append(i)
print(res1)
  • 方法二: 使用匿名函数及filter函数
res2 = list(filter(lambda x: x['case_id'] > 3, res1))
    • filter()返回的是一个迭代器,可以被list、tuple接收

扩展

前面的数据类型连接还算简单,但是用到的知识可能有点刁钻,如果不是勤加练习,可能都想不到还有第二种解法,甚至第三、第四种。为了增加难度,结合文件的读取,来对读取文件数据进行数据类型转换。

当前有一个case.txt文件,里面中存储了很多用例数据:
  • 如下,每一行数据就是一条用例数据,
# 文件中数据
url:www.baidu.com,mobilephone:13760246701,pwd:123451
url:www.baidu.com,mobilephone:15678934551,pwd:234552
url:www.baidu.com,mobilephone:15678934551,pwd:234553
url:www.baidu.com,mobilephone:15678934551,pwd:234554
url:www.baidu.com,mobilephone:15678934551,pwd:234555
要求一: 请把这些数据读取出来,到并且存到list中,格式如下
[
{'url': 'www.baidu.com', 'mobilephone': '13760246701', 'pwd': '123451'}, 
{'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234552'},
{'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234553'},
{'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234554'},
{'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'}
]
  • 代码实现
with open('cases.txt', 'r') as pf:
    text = pf.read()

lines = text.split('\n')

li2 = []
for line in lines:
    dic = {
   }
    for li in line.split(','):
        li1 = li.split(':')
        dic[li1[0]] = li1[1]
    li2.append(dic)
要求二:将上述数据再次进行转换,转换为下面这种字典格式格式
li2={'data1':{'url': 'www.baidu.com', 'mobilephone': '13760246701', 'pwd': '123456'}, 
   'data2':{'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'}, 
   'data3':{'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'},   
   'data4':{'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'},
   'data5':{'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'}
}
  • 代码实现
dic1 = {
   }
for i in range(len(li2)):
    dic1['data{}'.format(i + 1)] = li2[i]
相关文章
|
9天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
41 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
5天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
5天前
|
机器学习/深度学习 SQL 安全
如何确保自动化安全测试的全面性和准确性?
如何确保自动化安全测试的全面性和准确性?
|
1月前
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
1136 1
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
358 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
1月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
162 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
15天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
31 2
|
16天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
27 2
|
10天前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
1月前
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
296 0
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)

热门文章

最新文章