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]
相关文章
|
25天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
81 8
|
11天前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
100 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
8天前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
93 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
20天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
53 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
26天前
|
安全 Ubuntu Linux
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
43 9
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
|
15天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
51 2
|
21天前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
30天前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
30天前
|
数据管理 jenkins 测试技术
自动化测试框架的设计与实现
在软件开发周期中,测试是确保产品质量的关键步骤。本文通过介绍自动化测试框架的设计原则、组件构成以及实现方法,旨在指导读者构建高效、可靠的自动化测试系统。文章不仅探讨了自动化测试的必要性和优势,还详细描述了框架搭建的具体步骤,包括工具选择、脚本开发、执行策略及结果分析等。此外,文章还强调了持续集成环境下自动化测试的重要性,并提供了实际案例分析,以帮助读者更好地理解和应用自动化测试框架。
|
30天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!