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]
相关文章
|
2月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
2月前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
252 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
2月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
3月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
356 1
|
3月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
3月前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
786 0
JSON 监控 API
101 0
|
4月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
260 18
|
4月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
838 1
|
4月前
|
安全 测试技术 API
Python 单元测试详解
单元测试是Python开发中不可或缺的环节,能确保代码按预期运行、发现Bug、提升代码质量并支持安全重构。本文从基础概念讲起,逐步介绍Python单元测试的实践方法,涵盖unittest框架、pytest框架、断言使用、Mock技巧及测试覆盖率分析,助你全面掌握单元测试技能。
249 0

推荐镜像

更多