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]
相关文章
|
1天前
|
数据可视化 数据管理 测试技术
聊聊自动化测试框架
关于自动化测试框架的一些理解和思考总结,就是上面这些内容,提到的一些框架组件可能存在不合理的地方,仅供参考,如有更好的建议,请指出,不胜感激
10 4
聊聊自动化测试框架
|
1天前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
8 3
快速上手|HTTP 接口功能自动化测试
|
1天前
|
开发者
利用 GitHub Actions 自动化你的软件开发流程
在快速发展的软件开发环境中,自动化对于提升效率与质量至关重要。GitHub Actions 作为一款强大的工具,能帮助开发者实现从自动运行测试到部署应用等工作的自动化。本文详细介绍了 GitHub Actions 的核心概念、设置方法及实际应用示例,如自动测试、部署和合并 Pull Requests,助力提升开发流程的自动化水平。
|
3天前
|
安全 JavaScript 前端开发
自动化测试的魔法:如何用Python编写你的第一个测试脚本
【8月更文挑战第41天】在软件的世界里,质量是王道。而自动化测试,就像是维护这个王国的骑士,确保我们的软件产品坚不可摧。本文将引导你进入自动化测试的奇妙世界,教你如何使用Python这把强大的魔法杖,编写出能够守护你代码安全的第一道防护咒语。让我们一起开启这场魔法之旅吧!
|
7天前
|
存储 Java 关系型数据库
“代码界的魔法师:揭秘Micronaut框架下如何用测试驱动开发将简单图书管理系统变成性能怪兽!
【9月更文挑战第6天】Micronaut框架凭借其轻量级和高性能特性,在Java应用开发中备受青睐。本文通过一个图书管理系统的案例,介绍了在Micronaut下从单元测试到集成测试的全流程。首先,我们使用`@MicronautTest`注解编写了一个简单的`BookService`单元测试,验证添加图书功能;接着,通过集成测试验证了`BookService`与数据库的交互。整个过程展示了Micronaut强大的依赖注入和测试支持,使测试编写变得更加高效和简单。
25 4
|
10天前
|
IDE 测试技术 持续交付
Python自动化测试与单元测试框架:提升代码质量与效率
【9月更文挑战第3天】随着软件行业的迅速发展,代码质量和开发效率变得至关重要。本文探讨了Python在自动化及单元测试中的应用,介绍了Selenium、Appium、pytest等自动化测试框架,以及Python标准库中的unittest单元测试框架。通过详细阐述各框架的特点与使用方法,本文旨在帮助开发者掌握编写高效测试用例的技巧,提升代码质量与开发效率。同时,文章还提出了制定测试计划、持续集成与测试等实践建议,助力项目成功。
35 5
|
9天前
|
数据采集 测试技术 API
在BrowserStack上进行自动化爬虫测试的终极指南
随着互联网的发展,数据价值日益凸显,爬虫技术成为提取网页信息的关键工具。然而,不同环境下的测试与运行挑战重重,特别是在多浏览器、多平台上保证爬虫的稳定性和兼容性尤为困难。BrowserStack作为领先的跨浏览器测试平台,提供了强大的工具和服务。本文将详细介绍如何在BrowserStack上进行自动化爬虫测试,并结合代理IP技术提升爬虫的隐蔽性和成功率。通过具体步骤和案例分析,展示如何利用Selenium、自定义用户代理和Cookie设置来应对反爬虫机制。本指南旨在为开发者提供实用模板,帮助其在多变的测试环境中构建高效的爬虫系统。
|
10天前
|
存储 数据挖掘 程序员
揭秘Python:掌握这些基本语法和数据类型,你将拥有编程世界的钥匙!
【9月更文挑战第3天】Python 是一种简洁强大的高级编程语言,其清晰的语法和丰富的功能深受程序员喜爱。本文从基本语法入手,介绍 Python 的代码结构特点,如通过缩进区分代码块,使逻辑更清晰。接着详细讲解主要数据类型:数值型、字符串、列表、元组、集合与字典,每个类型均附有示例代码,帮助初学者快速掌握 Python,为后续学习打下坚实基础。
24 2
|
12天前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
38 4
|
11天前
|
安全 Linux 测试技术
Kali Linux预装的自动化渗透测试工具
Kali Linux预装的自动化渗透测试工具
21 2