测试开发实战项目 | 搭建Pytest接口自动化框架

news/2024/5/20 0:42:57/文章来源:https://blog.csdn.net/m0_73409141/article/details/130393387

一、预研背景

目前系统研发多为前后端分离,当后端接口研发完成后,可以不依赖前端界面通过接口测试提前发现问题并解决。同时由于软件迭代周期不断缩短,开发新功能后又担心影响原有功能,可以通过接口自动化进行原有功能快速回归测试,将更多精力专注于迭代功能测试,这样才能放心地发布产品。由此看来,接口自动化测试可以减轻工作量,提高测试效率和产品质量。市面上的主流接口自动化测试工具或框架很多,需要调研对比各自的特点,挑选出适合项目的工具快速完成自动化测试。

阿里巴巴P8级Python测试开发大佬,手把手教你如何独立搭建测试平台开发实战!学会这个根本不担心找不到高薪工作_哔哩哔哩_bilibili阿里巴巴P8级Python测试开发大佬,手把手教你如何独立搭建测试平台开发实战!学会这个根本不担心找不到高薪工作共计12条视频,包括:1. 为么什‬要pytest高插阶‬件定开制‬发、2. 如何搞定pytest插的件‬开发线上‬与发布、3. pytest框高架‬阶用之法‬插件制机‬及定制思路等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV1Lk4y1J7yq/?spm_id_from=333.337.search-card.all.click

二、预研目标

体验工具主要特性功能使用及便利性,体验内容包含如下:

l 单接口测试

l 多接口组合测试

l 测试报告

l 测试用例管理

l 日志查看

l 脚本调试

l 持续集成

三、工具/框架介绍

Pytest是一个软件测试框架。它是一款命令行工具,可以直接测试各类程序自动找到测试用例执行,并且汇报测试结果。

主要特性:

1) 易于上手,入门简单

2) 能支持简单的单元测试和复杂的功能测试

3) 测试用例编写简单可读性强,支持参数化

4) 灵活指定用例执行方式、顺序等

5) 丰富的基础库,可以大幅提高用户编写测试用例效率

6) 详细的日志输出

7) 灵活、扩展性好,可以很容易地融入已有的开发测试流程如可运行由unittest和node编写的测试用例

8) 很容易与其他工具集成到一起使用,比如和jenkins持续集成、allure测试报告展示等

官网:https://docs.pytest.org/en/latest/index.html

四、工具/框架环境搭建

使用Python3+Pytest+Request+Jenkins+Allure框架来进行接口自动化测试,并实现持续集成,自动生成html测试报告。

1、Python安装

它不依赖与Python版本,Python2(2.6及更高版本)和Python3(3.3及更高版本)都可以安装最新版本的pytest。

l 检查本地是否已有python环境:

python --version

 l python3安装(若已经安装,此步忽略)

安装可参考:https://blog.csdn.net/weixin_40844416/article/details/80889165

1、requests安装

l 通过命令行安装requests

pip install request

3、Pytest安装

l 通过命令行安装Pytest

pip install pytest

l 命令行检查安装版本

pytest --version

4、Pycharm配置pytest运行程序

Pycharm File->Settings->Tools->Python Integrated Tools,选择需运行pytest项目,Default test runner下拉选择pytest,设置完成后,编写pytest用例即可直接使用pytest运行

五、编写第一个自动化脚本

脚本实现的用户场景:获取To

1.import pytest  
2.import requests  
3.  
4.authentication_url_path = "/v1/tokens"  
5.  
6.json_login = {  
7.    "authType": "password",  
8.    "params": {  
9.        "username": "zhuxuefei",  
10.        "password": "jixlb2tIrjF5t/bYQTXz4Q=="  
11.    }  
12.}  
13.  
14.def pytest_addoption(parser):  
15.    parser.addoption("--ip", action="store", default="XX.XX.XX.XX", help="please input target VM ip.")  
16.    parser.addoption("--port", action="store", default="api", help="please input target service port.")  
17. 
18. 
19.@pytest.fixture(scope="session")  
20.def ip(request):  
21.    return request.config.getoption("--ip")  
22. 
23. 
24.@pytest.fixture(scope="session")  
25.def port(request):  
26.    return request.config.getoption("--port")  
27. 
28. 
29.@pytest.fixture(scope="session")  
30.def uri(ip,port):  
31.    uri = "http://%s/%s" % (ip, port)  
32.    return uri  
33. 
34. 
35.@pytest.fixture(scope="session")  
36.def auth_token(uri):  
37.    headers = {"User-Agent": "automation",  
38.               "content-type": "application/json;charset=UTF-8"  
39.               }  
40.  
41.    post_response = requests.post(url=uri + authentication_url_path,  
42.                                  json=json_login,  
43.                                  headers=headers)  
44.  
45.    assert post_response.status_code == requests.status_codes.codes.OK  
46.    resp_payload = post_response.json()  
47.    assert resp_payload['status'] == 200  # to be defined.  
48.    auth_token = resp_payload['data']['key']  
49.  
50.    return auth_token  
51.
52.@pytest.fixture(scope="session")  
53.def headers(uri):  
54.    headers = {"User-Agent": "automation",  
55.               "content-type": "application/json;charset=UTF-8"  
56.               }  
57.  
58.    post_response = requests.post(url=uri + authentication_url_path,  
59.                                  json=json_login,  
60.                                  headers=headers)  
61.  
62.    assert post_response.status_code == requests.status_codes.codes.OK  
63.    resp_payload = post_response.json()  
64.    assert resp_payload['status'] == 200  # to be defined.  
65.    auth_token = resp_payload['data']['key']  
66.  
67.    headers = {"User-Agent": "automation",  
68.               "content-type": "application/json;charset=UTF-8",  
69.               "T-AUTH-TOKEN": auth_token}  
70.    return headers  

ken-》发起一个HTTP请求-》对响应结果进行断言

详细步骤:

1、每个接口都需要用到token,通过conftest.py共享fixture,@pytest.fixture标记返回封装获取token值函数

conftest.py:

2、将获取token值fixture函数传递给http请求接口

3、用例数据写在excel文件中,实现读取测试用例逻辑,将测试用例数据通过@pytest.mark.parametrize()传入测试函数,循环执行测试数据

param_create_vlanpool = read_excel_tuple(excelFile, '创建VLAN池') 

4、每次执行assert断言用例结果

用例名称以test开头,如test_create_vlanpool.py:

1.@pytest.mark.parametrize('name,tag,ResourcePoolName,vlanTagStart,vlanTagEnd', param_create_vlanpool)  
2.def test_create_vlanpool(uri, headers, name, tag, ResourcePoolName, vlanTagStart, vlanTagEnd):  
3.    resourcepoolid = get_resourcepoolid(uri, headers, ResourcePoolName)  
4.    param = {  
5.        'name': name,  # VLAN池名称  
6.        'tag': tag,  
7.        'vlanPoolResourcePoolList': [{'resourcePoolId': resourcepoolid}],  #作用域调用资源池ID  
8.        'vlanTagEnd': vlanTagStart,  # 结束VLAN ID  
9.        'vlanTagStart': vlanTagEnd  # 起始VLAN ID  
10.    }  
11.    create_vlanpool_response = requests.post(  
12.        url=uri + create_vlanpool_url_path,  
13.        headers=headers,  
14.        json=param  
15.    ).json()  
16.    print(create_vlanpool_response)  
17.    code = create_vlanpool_response['status']  
18.    allure.attach("请求响应code", str(create_vlanpool_response['status']))  
19.    allure.attach("请求响应结果", str(create_vlanpool_response))  
20.    my_log().info(create_vlanpool_response)  

5、Pycharm的Terminal页面进入该py文件路径下,执行pytest test_create_vlanpool.py或直接右击测试用例Run ‘pytest’ in ‘
test_create_vlanpool.py.py’运行用例

六、编写业务场景接口组合测试脚本

测试报告查看

利用Allure框架生成高大上的html报告,allure还支持使用Jenkins持续集成。

l 安装allure-pytest插件,通过allure标签自定义完善测试报告

import allure

@allure.feature(‘XX’)

@allure.story(‘XX’)

@allure.attach(‘XX’)

l 执行pytest test.py --alluredir report/allure_raw生成运行后原始结果

l 安装Allure工具并配置环境变量,确保allure命令可用

allure generate <allure测试结果目录> -o <存放报告的目录> --clean 生成html测试报告

测试用例管理

测试用例编写命名规则

l 测试文件应命名为st_xx.py或xx_test.py

l 测试类命令以Test开头

l 测试函数、测试类方法命令以test开头

pytest提供标记机制,使用marker对测试函数标记指定运行用例

l 比如选择部分测试用例作为冒烟测试,可以对它们添加@pytest.mark.smoke装饰,运行时在命令中指定-m smoke就可以

l 通过@pytest.mark.run(order=X)来标记用例执行顺序

l 通过@pytest.mark.skip()、@pytest.mark.skipif()来跳过不想执行的测试用例

运行测试用例方式

运行pytest时可以指定目录和文件。如果不指定,pytest会搜索当前目录及其子目录中以test_开头或以_test结尾的测试函数。

l 命令方式执行

pytest -v -s xx.py

l Pytest.main主程序执行,参数和命令方式一致

在编写第一个自动化脚本中都对应应用

l 使用fixture配置、传递初始化测试数据

l 通过confest.py共享fixture

l @pytest.mark.parametriz()数据参数化允许传递多组数据执行批量测试

日志查看

Pycharm执行pytest用例可以在终端界面输出详细日志

脚本调试

持续集成

l Jenkins上创建工程,配置接口自动化工程代码库

l 设置需被执行测试环境及调用主程序执行 

l Jenkins安装Allure插件,设置allure report原始执行结果路径

l Jenkins自动构建运行用例并生成测试报告

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_104089.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git版本本地远程分支管理测试

只为搞清楚一些基本的git的本地提交、分支&#xff0c;远程分支的概念。 创建git库。 在本地首次建立一个001文件&#xff0c;首次提交到本地master&#xff0c;不提交&#xff08;push&#xff09;到远程master&#xff08;gitee&#xff09;。 add 增加001文件到库。 Git-co…

传统协议大比拼之IP协议

文章目录 一、引言二、IP协议的基本特点2.1 IP协议的作用和基本功能2.2 地址管理手动分配IP动态主机配置协议(DHCP)网络地址转换(NAT)IPv6 2.2 路由选择RIP(距离向量型的协议)OSPF(链路状态类型协议)BGP(边界网关协议) 2.3 IP协议的特点&#xff1a; 三、IP地址的组成3.1 IP地址…

三菱GX Works2梯形图程序分段显示设置的具体方法示例

三菱GX Works2梯形图程序分段显示设置的具体方法示例 大家平时在使用GX Works2进行梯形图程序编辑时,默认是一整段在一起,程序步数较多时查看起来不是那么方便,下面就和大家分享如何通过声明编辑来实现程序分段显示。 具体方法可参考以下内容: 如下图所示,打开GX Works2编…

知网导入EndNote

首先进入知网&#xff0c;搜索你想要找的期刊论文。 选择EndNote 点击导出 浏览器自动下载以txt为后缀的文件 导入到EndNote中

汇编小程序解析--3D立方体旋转

汇编小程序解析–3D立方体旋转&#xff0c;源代码如下&#xff0c;是vulture大神于1995年写的&#xff0c;我到现在才基本看懂。 ;本程序由国外的Vulture大哥编写&#xff0c;并公布了源码&#xff0c;这个是他95年的一个作品&#xff0c;可以说是在当时是非常成功的&#xff…

HJL-93/A数字式交流三相电流继电器 导轨安装 约瑟JOSEF

品牌&#xff1a;JOSEF约瑟名称&#xff1a;数字式交流三相电流继电器型号&#xff1a;HJL系列功率消耗&#xff1a;≤5W触点容量&#xff1a;250V/5A额定电压&#xff1a;58、100、110、220V HJL系列 数字式交流三相电流继电器型号&#xff1a; HJL-93/AY数字式交流三相电流继…

博途1200/1500PLC工艺PID编程应用(SCL语言)

博途工艺PID的详细解读可以查看下面的博客文章,这里不再赘述 博途PLC 1200/1500PLC 工艺对象PID PID_Compact详细解读_RXXW_Dor的博客-CSDN博客这篇博文我们详细解读博途PLC自带的PID功能块PID_Compact,大部分工业闭环调节过程,我们采用系统自带的PID功能块基本都能胜任,一…

力扣sql中等篇练习(十三)

力扣sql中等篇练习(十三) 1 每位学生的最高成绩 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 #先找到最大的元素 然后分组即可,不用管某些字段(grade)是不是聚合字段 SELECT e1.student_id,min(e1.course_id) course_id,e1.grade FROM Enrollment…

很不错的一篇文章,值得点赞收藏,带你全面了解MySQL性能调优、错误代码总结和全局参数配置(持续更新中ing)

前言 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;关系…

leetcode刷题(9)二叉树(3)

各位朋友们&#xff0c;提前祝大家五一劳动节快乐啊&#xff01;&#xff01;&#xff01;今天我为大家分享的是关于leetcode刷题二叉树相关的第三篇我文章&#xff0c;让我们一起来看看吧。 文章目录 1.二叉树的层序遍历题目要求做题思路代码实现 2.从前序与中序遍历序列构造二…

上海亚商投顾:沪指全天震荡微跌 新能源赛道股集体反弹

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 大小指数今日走势分化&#xff0c;沪指探底回升小幅下跌&#xff0c;创业板指盘中涨超2%&#xff0c;午后涨幅有所…

黑盒测试过程中【测试方法】详解5-输入域,输出域,猜错法

在黑盒测试过程中&#xff0c;有9种常用的方法&#xff1a;1.等价类划分 2.边界值分析 3.判定表法 4.正交实验法 5.流程图分析 6.因果图法 7.输入域覆盖法 8.输出域覆盖法 9.猜错法 黑盒测试过程中【测试方法】讲解1-等价类&#xff0c;边界值&#xff0c;判定表_朝一…

无线通信网 - 无线局域网 WLAN(802.11 标准)

文章目录 1 概述2 WLAN2.1 802.11 标准2.2 网络分类2.3 通信技术 3 扩展3.1 移动通信3.2 网工软考真题 1 概述 #mermaid-svg-UcgosJsdJfSTEm0Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UcgosJsdJfSTEm0Y .err…

AI如何帮助人类进而验证直觉的可靠性?

AI可以通过以下方式帮助人类寻找反例进行否定或寻找特别的架构&#xff1a; 1. 利用机器学习算法进行反例搜索。AI可以训练一个分类器&#xff0c;用于判断某个假设是否成立。通过反复训练和测试&#xff0c;AI可以识别出一些不合理的假设&#xff0c;并帮助人类进行进一步的验…

Windows环境下C++ 安装OpenSSL库 源码编译及使用(VS2019)

参考文章https://blog.csdn.net/xray2/article/details/120497146 之所以多次一举自己写多一篇文章&#xff0c;主要是因为原文内容还是不够详细。而且我安装的时候碰到额外的问题。 1.首先确认一下自己的代码是Win32的还是Win64的&#xff0c;我操作系统是64的&#xff0c;忘…

【SVN】windows SVN安装使用教程(服务器4.3.4版本/客户端1.11.0版本)

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

材料写作素材:关于“大”排比句40例

1.一轮思想政治“大督查”&#xff0c;一轮政策落实“大检查”&#xff0c;一次非公企业“大走访”&#xff0c;一次问题线索“大起底”&#xff0c;一批典型案例“大曝光”。 2.在重大风险挑战面前豁得出去、顶得上去&#xff0c;在重大困难考验面前迎难而上、敢于胜利&#…

逐浪智能时代,网易数帆“重写”低代码

如今&#xff0c;越来越多行业正驶入数字化转型的深水区&#xff0c;如何彻底释放数据生产力&#xff0c;成为所有企业的一道必答题。 4月25日&#xff0c;“网易数帆低代码业务战略发布会”在线上举行。在发布会上&#xff0c;网易数帆发布了CodeWave智能开发平台&#xff0c…

e签宝,「进化」在2023

精准布局生态化、统一化、智能化、信创化&#xff0c;辅以具体产品落地&#xff1b;加速产业、行业、企业、业务&#xff0c;“四业”互通互联&#xff0c;提高产业数字化渗透率。电子签“群战”时代&#xff0c;e签宝再次进化。 作者|斗斗 出品|产业家 “印章在谁手上&…

h5逻辑_解决h5页面嵌入ios兼容性问题

安全区域 如下图所示&#xff5e; 蓝色部分为安全区域。处于安全区域内的内容不受圆角、齐刘海、小黑条的影响。 若是将h5页面嵌入app中&#xff0c;就需要进行适配—> 让h5页面展示在安全区域内。 tips: 安全区域是在ios11之后并且是iPhoneX及以上机型才有的。 因此我们只…