当前位置: 首页 > news >正文

接口自动化-框架搭建(Python+request+pytest+allure)

使用代码如何开展接口自动化测试。

一 选择自动化测试用例

业务流程优先,单接口靠后,功能稳定优先,变更频繁不选。

二 搭建自动化测试环境

(1)安装python编译器3.7版本以上--自行安装
(2)安装pycharm工作,方便编写和维护代码--自行安装
(3)安装request三方库,用于发送请求
(4)安装pytest三方库,用于编写测试用例
(5)安装allure,用于查看生成和查看测试报告

三 搭建自动化测试框架

(1)搭建基础框架项目目录结构
(2)通用功能类的封装,如数据库连接,excle读取等
(3)接口对象(业务类)封装与调用:接口API+Pytest框架编写测试脚本
(4)测试数据参数化(一般是针对单接口的),测试数据json,yaml,excle等
(5)用例组织运行,运行测试用例并生成测试报告

四 代码实现自动化


五 实现持续集成CICD

自行完成python和pycharm工具的安装后,我们接下来就是安装request,pytest,以及allure。

六 request安裝

request是一個三方的库,他的安装非常简单,如下
安装:python -m pip install requests
验证:pip show requests
request的使用步骤:导入包-->发送接口请求--->查看响应数据

  • request发送请求
request.请求方法(url,params=None,data=None,json=None,header=None)
//请求方法一般为:get,post,put,delete
  • requests查看响应

查看状态码:response.status_code
json形式的响应内容获取:response.json()
文本形式的响应内容获取:response.text
查看请求url:response.url
查看响应头部字符编码:response.encoding
查看头信息:response.headers
查看cookie:response.cookie
简单示例:

# 1 导包
import requests
# 2 发送请求
response = requests.get(url='www.baidu.com')
# 查看响应
print(response.status_code)
print(response.text)

七 pytest框架环境搭建

1.使用pip安装pytest

pip install pytest  安装pytest
pip install pytest-html  原生态的报告模板

2.查看安装是否成功

pip show pytest

3.pytest执行测试用例的规则

  • .py测试文件必须以test开头(或以test结尾)
  • 测试类必须以Test开头,且无init方法
  • 测试方法必须以test开头,def test_001()
  • 断言必须使用assert

4. 数据驱动(参数化)
数据驱动:data driver testing(DDT),在自动化测试中测试数据与功能函数相分离,单独存储,运行自动化测试用例时,框架会读取数据源中的数据,把数据作为参数传递到功能函数中。
由于一般测试用例覆盖多条不同输入,根据不同的前置条件选取多条数据执行多次同一功能函数,这样减少重复代码,不同输入条件之间的测试结果互相不受影响,这就是数据驱动。

在方法前添加语法糖即可实现参数化:

# @pytest.mark.parameriza('变量名',[参数化数据])    ---单一参数
@pytest.mark.parameriza('a',[1,2,3])
def test_001(self,a):print('第一个测试用例')assert 1+1==a
# 说明:用例会执行三次(三组数据),a分别为1,2,3# @pytest.mark.parameriza('变量名1,变量名2',[(value1.,value2),(value2,)]) ,多个参数
@pytest.mark.parameriza('a,b',[(1,2),(3,4),(5,6)])
def test_001(self,a,b):print('第一个测试用例')assert a+1==b
# 说明:用例会执行三次(三组数据),a分别为1,3,5,b分别为2,4,6

5.pytest的 setup 与 teardown

  • setup:前置条件,测试用例的前置条件
  • teardown: 后置条件,用例执行后,需要恢复测试环境
  • yield :在这个关键字之前的代码为setup部分,之后的代码为teardown部分
    在pytest中有四种setup和teardown
    1、setup_module & teardown_module:在整个测试用例所在的文件中所有的方法运行前和运行后运行,只会运行一次;
    2、setup_class和teardown_class:则在整个文件中的一个class中所有用例的前后运行;
    3、setup_method和teardown_method:在class内的每个方法运行前后运行;
    4、setup_function、teardown_function:在非class下属的每个测试方法的前后运行;
import pytest@pytest.fixture(scope='session')  #装饰器,声明下面的函数是setup函数,缺省值为function级#scope可以加入参数scope='class',将级别改为class#scope可以加入参数scope='module',将级别改为module#scope='session'  使用这个级别时,将fixture的内容写到conftest.py文件中,目录下的所有文件都使用这个配置def fun1():print('开始')yield  #这个关键字之后的代码相当于teardownprint('结束')def test_c01(fun1):assert 1==2if __name__ == '__main__':pytest.main(['conftest.py','-s'])

6、运行文件:

  • 运行并生成html测试报告:pytest 用例路径 --html=./report/result.html , 注意:--html= 没有空格.
  • 运行该测试模块:pytest test_login.py -s, -s 输出print信息
  • 用main()方法来运行:pytest.main(['当前用例路径','--html=测试报告/XX.html ']) ---> 运行并生成html测试报告
  • 通过allure生成测试报告:pytest.main([__file__, '-sv','--alluredir','./report/report','--clean-alluredir'])

八 Allure安装--pytest 结合Allure操作

  • Allure 安装
    1、下载Allure.zip并解压到任意目录(C:\allure\allure-2.13.0\)
    2、添加该路径到环境变量的path中
    3、cmd 安装 pip install allure-pytest
    4、验证是否安装成功:cmd 中输入allure --version查看盗版本信息
    如果安装不成功,可以在环境变量--系统变量--path中配置上allure的bin目录
    5、allure报告生成:cmd执行命令生成、pycharm的终端Terminal执行命令
    (1)方式1:pytest [测试文件] -s -q --alluredir=../report/tmp 生成Allure报告, 数据存在/tmp目录,--alluredir用于指定存储测试结果的路径;-s 表示允许执行print语句;
    (2)方式2:allure generate ../report/tmp -o ..report/tmp --clean 生成测试报告,–clean 覆盖路径
    6、查看测试报告
    (1)使用默认浏览器打开:allure serve ../report/tmp/
    (2)打开报告:allure open -h 127.0.0.1 -p 8883 ./report/

在cmd/终端中:测试用例的执行以及报告的生成如下:

pytest test_feature_story.py --alluredir=./result/2  # 执行测试用例模块test_feature_story.py
allure generate ./result/2 -o ./report/2/ --clean  # 生成allure 测试报告
allure open -h 127.0.0.1 -p 8883 ./report/2 # 打开allure 测试报告

在自动化测试中,执行以及生成报告如下:在main.py模块中,并运行可自动生成报告

pytest.main(["./test_script", "-sv","--alluredir","./report/temp_jsonreport"]) 
os.system("allure generate ./report/temp_jsonreport -o ./report/html --clean")# ./test_script   测试用例的路径,可以吧多个测试用例写在这个一个文件中
# --alluredir      创建allure报告的路径
# -o是执行
# --clean是清除之前生成的报告
# 或者
pytest.main([__file__, '-sv','--alluredir','./report/report','--clean-alluredir'])     
os.system('allure serve ./report/report')  #  

注意:因为allure生成的报告是json格式的,需要再转化成html格式的,所以会自动生成一个temp_jsonreport文件

  • allure 报告可以展示多级
    @allure.epic('1')
    @allure.feature(‘2’)
    @allure .story('3')
    @allure.title(‘4’)

例子:简单生成报告的过程

import pytest 
import allure 
import os
@allure.epic('项目名称') 
@allure.feature('业务模块名称') 
class Test100:     @allure.story('接口名称')    @allure.title('用例标题1')    def test_c100(self):         assert 1 == 2     @allure.story('接口名称2')     @allure.title('用例标题2')     def test_c101(self):         assert 1 == 1 if __name__ == '__main__':     pytest.main([__file__, '-sv','--alluredir','./report/report','--clean-alluredir'])     os.system('allure serve ./report/report')



 

相关文章:

接口自动化-框架搭建(Python+request+pytest+allure)

使用代码如何开展接口自动化测试。 一 选择自动化测试用例 业务流程优先,单接口靠后,功能稳定优先,变更频繁不选。 二 搭建自动化测试环境 (1)安装python编译器3.7版本以上--自行安装 (2)安…...

[论文阅读]Constrained Decision Transformer for Offline Safe Reinforcement Learning

Constrained Decision Transformer for Offline Safe Reinforcement Learning Proceedings of the 40th International Conference on Machine Learning (ICML), July 23-29, 2023 https://arxiv.org/abs/2302.07351 泛读只需要了解其核心思想即可。 安全强化学习(Safe Rei…...

工具_Nginx

文章目录 location语法介绍跨域配置https配置http重定向到https配置反向代理配置负载均衡配置upstream配置负载均衡算法(1)rr轮询(默认)(2)wrr加权轮询(weight)(3&#x…...

web开发Model1

WEB开发模式–Model 1 Model1是指基于JSPJavaBean的开发模式,JSP负责web的相关部分,包括数据的展示,请求逻辑的控制等,JavaBean负责业务的逻辑部分,包括数据的存取,业务的实现。 这是我写的一个小项目&…...

ImportError: cannot import name ‘Sequential‘ from ‘keras.models‘

报错信息 ImportError: cannot import name Sequential from keras.models错误代码示例 import tensorflow as tf from keras.models import Sequential # 报错行model Sequential()错误分析 这个错误通常发生在 TensorFlow 和 Keras 的版本不兼容时。TensorFlow 2.x 版本…...

python实战(二)——房屋价格回归建模

一、任务背景 本章将使用一个经典的Kaggle数据集——House Prices - Advanced Regression Techniques进行回归建模的讲解。这是一个房价数据集,与我们熟知的波士顿房价数据集类似,但是特征数量要更多,数据也要更为复杂一些。下面,…...

UHF机械高频头的知识和待学习的疑问

电路图如上所示: 实物开盖清晰图如下: 待学习和弄懂的知识: 这是一个四腔的短路线谐振。分别是输入调谐,放大调谐,变频调谐和本振 第一个原理图输入为75欧(应该是面向有同轴线的天线了)如下图…...

深入理解 SQL 中的 WITH AS 语法

在日常数据库操作中,SQL 语句的复杂性往往会影响到查询的可读性和维护性。为了解决这个问题,Oracle 提供了 WITH AS 语法,这一功能可以极大地简化复杂查询,提升代码的清晰度。本文将详细介绍 WITH AS 的基本用法、优势以及一些实际…...

同三维T80005JEHA-4K60 4K60超高清HDMI/AV解码器

1路HDMI1路CVBS1路3.5音频输出,HDMI支持4K60,支持1路4K60解码,1路高清转码 产品简介: T80005JEHA-4K60是一款4K60超高清解码器,支持1路HDMI/CVBS解码输出,HDMI支持4K60,适用于各种音视频解决方…...

深信服秋季新品重磅发布:安全GPT4.0数据安全大模型与分布式存储EDS新版本520,助力数字化更简单、更安全

10月23日,深信服举办2024秋季新品发布会。发布会上,深信服正式推出了最新的创新成果:实现动静态数据分类分级和数据风险自动研判分析的安全GPT4.0、具备卓越可靠性和AI勒索防护能力的分布式存储EDS新版本520。通过这些新品和能力,…...

Flutter图片控件(七)

1、加载图片 import package:flutter/material.dart;void main() {runApp(const MaterialApp(home: MyHomePage(),)); }class MyHomePage extends StatelessWidget {const MyHomePage({super.key});overrideWidget build(BuildContext context) {return Scaffold(appBar: AppB…...

JavaEE初阶---文件IO总结

文章目录 1.文件初识2.java针对于文件的操作2.1文件系统的操作---file类2.2文件内容的操作---流对象的分类2.4字符流的操作》文本文件2.4.1异常的说明2.4.2第一种文件内容的读取方式2.4.3第二种读取方式2.4.4close的方法的介绍2.4.5close的使用优化操作2.4.6内容的写入 2.3字节…...

10.28Python_pandas_csv

三、读取CSV文件 CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本); CSV 是一…...

数据处理与可视化:pandas 和 matplotlib 初体验(9/10)

数据处理与可视化:pandas 和 matplotlib 初体验(9/10) 介绍 在如今的数据驱动时代,掌握数据处理与可视化是每个开发者和数据科学家不可或缺的技能。Python 拥有强大的数据处理库 pandas 和数据可视化库 matplotlib,它…...

鸿蒙学习总结

鸿蒙(HarmonyOS),做为国产自主研发设计的第一个操作系统,从开放测试以来一直备受关注。其纯血鸿蒙版(HarmonyOS NEXT)也于进日发布。过去的一段时间里,我站在一个移动开发者的角度对HarmonyOS进…...

如何修改文件创建时间?六个超简单修改方法介绍

怎么修改文件创建时间?在信息安全与隐私保护的领域里,每一个细节都可能成为泄露敏感信息的突破口。文件的创建时间,这个看似微不足道的数据点,实则可能蕴含着重要的时间线索,对于不希望被外界窥探其内容或来源的个人及…...

【MySQL 保姆级教学】内置函数(9)

内置函数 1. 日期函数1.1 日期函数的种类1.2 示例1.3 日期的转换 2. 字符串函数2.1 种类2.2 示例 3. 数学函数3.1 种类3.2 向上取整和向下取整3.3 示例 4. 其他函数4.1 查询当前用户/数据库4.2 ifnull(val1,val2)4.3 md5()函数4.4 password()函数 1. 日期函数 1.1 日期函数的种…...

华为大咖说丨如何通过反馈机制来不断优化大模型应用?

本文分享自时习知 作者:袁泉(华为AI数据工程专家)全文约3015字,阅读约需8分钟 大模型应用正式投入使用后,存在一个较为普遍的情况:在利用“大模型提升业务运营效率”的过程中,业务部门和IT团队…...

上海亚商投顾:沪指缩量震荡 风电、传媒股集体走强

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天缩量震荡,三大指数集体收涨,北证50则跌超7%,超80只北交所个股跌逾…...

三磺酸-Cy3.5-羧酸在水相环境中表现良好,能够提高成像的清晰度和准确性

一、基本信息 中文名称:三磺酸-Cy3.5-羧酸,水溶性Cy3.5 羧基 英文名称:trisulfo-Cy3.5-carboxylic acid,trisulfo-Cy3.5-COOH,trisulfo-Cyanine3.5-COOH 分子式:C41H44N2NaO11S3- 分子量:85…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...