python+pytest自动化测试函数测试类测试方法的封装

前言

今天呢,笔者想和大家聊聊python+pytest接口自动化中将代码进行封装,只有将测试代码进行封装,才能被测试框架识别执行。

例如单个接口的请求代码如下:

1

2

3

4

5

6

import requests

headers = {

    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"

}

url = "https://mp.toutiao.com/profile_v4/"

res = requests.get(url=h_url, headers=headers)

假设我们需要将上面这段代码编写成测试框架能执行的测试用例,仅仅只是这样写代码显然是不够的,还需要进行如下补充:

需要将代码封装成单元测试框架 (pytest或unittest) 能识别的测试函数或测试类,否则将不会被识别执行。需要加上断言,即结果与期望之间的对比,单元测试框架才能判定该用例执行结果是否通过,结果==期望则说明通过,否则失败。

python中函数以及类的封装这里不做过多说明,这篇文章的目的是让大家明白在接口自动化测试中一般怎样封装测试代码

一、测试用例封装的一般规则

测试用例的封装有两种,测试函数和测试类,封装的一般规则如下:

一个测试函数对应一条测试用例。测试类中可定义多个测试方法,一个测试方法对应一条测试用例,测试类可以看作是一个测试用例集。pytest中测试函数或测试方法的命名必须以test开头,测试类名必须以Test开头。具体命名规则可以参考我之前的文章pytest(3)-测试命名规则。对于单接口的测试校验,一个单接口的测试用例只包含一个接口请求,即将一个接口请求封装成一个测试函数或测试方法。对于场景(多接口) 的测试校验,一条场景测试用例需请求多个接口,因此需要将多个接口请求封装在同一个测试函数或方法中。一般封装一个接口的正向校验、异常校验封装成不同的方法,并封装在同一个测试类中。如定义一个登陆的测试类,正确用户名、密码请求封装成一个方法 (即一条测试用例),正确用户名、错误密码请求封装成另一个方法 (即另一条测试用例)。也可以将某个功能点或功能相关联的接口用例封装在同一个测试类中。比如个人中心涉及到的接口,可以封装在同一个测试类中二、测试函数的封装

一般而言,一个测试函数对应一条用例。上面的代码编写成一条测试用例,示例如下:

 强调,pytest中测试函数命名必须以test开头,如test_get_home。

三、测试类/方法的封装

一个测试类相当于一个测试用例集,类中的每个方法对应一条测试用例。以登录接口为例,封装成测试类,示例如下:

 强调,pytest中测试类命名需要以Test开头,如TestLogin,且测试类中不能有init方法。测试类中测试方法必须以test开头,如test_login_normal。

四、示例代码

pytest中可以使用命令行或者使用代码方式即 pytest.main() 执行用例,具体可参考文章pytest(1)-简介。

完整的示例代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

import requests

import pytest

import json

def test_get_home():

    '''

    请求首页接口

    :return:

    '''

    headers = {

        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"

    }

    url = "https://www.cnblogs.com/lfr0123/"

    res = requests.get(url=url, headers=headers)

    # 断言,判断返回结果的code是否等于200,当然实际接口测试中一般返回结果中还会有别的字段需要断言

    assert res.status_code == 200

  

class TestLogin:

    '''

    登录接口校验

    '''

    url = "http://127.0.0.1:5000/login"

    headers = {"Content-Type": "application/json;charset=utf8"}

  

    def test_login_normal(self):

        '''正确用户名、正确密码登录'''

        data = {

            "username": "AndyLiu",

            "password": "123456"

        }

        res = requests.post(url=self.url, json=data, headers=self.headers)

        # 断言

        assert res.status_code == 200

        assert json.loads(res.text)["token"]

  

    def test_login_error(self):

        '''正确用户名、错误密码登录'''

        data = {

            "username": "AndyLiu",

            "password": "111111"

        }

        res = requests.post(url=self.url, json=data, headers=self.headers)

        # 断言

        assert res.status_code == 200

        assert not json.loads(res.text)["token"]

if __name__ == '__main__':

    pytest.main()

总结

  • 测试函数、测试类/测试方法的封装,其实不管是什么单元测试框架,遵循的方式都一样。
  • 而在命名方式上各有自己的要求,比如pytest与unittest中测试命名方法有一定的区别。
  • 把一个有自己断言的函数或方法看成是一条测试用例,那么测试类其实就是一个含有一条或者多条测试用例的测试用例集,类中的每个方法对应一条测试用例。
  • 一个测试类中放置哪些测试方法,换句话说一个测试用例集中应该包含哪些测试用例,这个可以按照项目自身情况而定,也可按照测试人员自己的想法而定,主旨就是要清晰明了
​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

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

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

相关文章

证明之三条看似显然实则需要证明的陈述

三条看似显然实则需要证明的陈述 “表面显然的数学定理:隐藏的证明之谜” 较高等的数学中,有一点让很多人感到费解:其中有一些定理看上去非常显然,简直无须证明。遇到这样的定理时,人们常常会问:“如果这…

海外媒体发稿:掌握这8个东南亚媒体发稿的技巧-华媒舍

在如今的数字化时代,媒体的地位越来越重要,尤其在东南亚地区。了解如何在关键时刻掌握东南亚媒体发稿的技巧是非常重要的。本文将介绍8个在东南亚地区重要的媒体发稿技巧,帮助您更好地传达信息。 1. 熟悉目标媒体 要掌握东南亚媒体发稿的技巧…

如何基于YAML设计接口自动化测试框架?看完秒会!

在设计自动化测试框架的时候,我们会经常将测试数据保存在外部的文件(如Excel、YAML、CSV)或者数据库中,实现脚本与数据解耦,方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接编写测试用例&…

.NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

一、效果 记录日志为文档 记录日志到数据库 二、添加NuGet包 三、log4net.config代码配置 <?xml version"1.0" encoding"utf-8" ?> <log4net><!-- Debug日志 --><appender name"RollingFileDebug" type"log4net…

抓包分析 TCP 协议

TCP 协议是在传输层中&#xff0c;一种面向连接的、可靠的、基于字节流的传输层通信协议。 环境准备 对接口测试工具进行分类&#xff0c;可以如下几类&#xff1a; 网络嗅探工具&#xff1a;tcpdump&#xff0c;wireshark 代理工具&#xff1a;fiddler&#xff0c;charles&…

论文阅读-EMS: History-Driven Mutation for Coverage-based Fuzzing(2022)模糊测试

一、背景 本文研究了基于覆盖率的模糊测试中的历史驱动变异技术。之前的研究主要采用自适应变异策略或集成约束求解技术来探索触发独特路径和崩溃的测试用例&#xff0c;但它们缺乏对模糊测试历史的细粒度重用&#xff0c;即它们在不同的模糊测试试验之间很大程度上未能正确利用…

【PyQt】在PyQt5的界面上集成matplotlib绘制的图像

文章目录 0 前期教程1 概述2 matplotlib2.1 库导入2.2 图片的各个部分解释2.3 代码风格2.4 后端 3 集成matplotlib图像到pyqt界面中3.1 使用到的模块3.2 理解Qt Designer中的“控件提升”3.3 界面与逻辑分离的思路3.4 扩展 0 前期教程 【PyQt】PyQt5进阶——串口上位机及实时数…

Android稳定性相关知识

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、相关方法论3.1 crash3.2 性能3.3 高…

一,STM32cubeMX配置FreeRTOS工程

从这篇文章开始&#xff0c;大家就进入到了FreeRTOS的学习之路。 那么&#xff0c;从这里开启学习的第一课如何使用cubeMX配置FreeRTOS工程 文章目录 前言一、使用 cubeMX 配置 FreeRTOS二、CMSIS 接口总结 前言 一、使用 cubeMX 配置 FreeRTOS 选择 stm32 芯片。 选择外部晶振…

【Linux】简单的网络计算器的实现(自定义协议,序列化,反序列化)

文章目录 前言一、 服务端1.ServerCal.cc&#xff08;服务器主文件&#xff09;2.ServerCal.hpp3.Sock.hpp(套接字封装)4.TcpServer.hpp(服务器)5.Protocol&#xff08;自定义协议&#xff09; 二、用户端1.ClientCal 三、Log.hpp&#xff08;日志&#xff09;四、makefile 前言…

洛谷 P8627 [蓝桥杯 2015 省 A] 饮料换购

参考代码and代码解读 #include <bits/stdc.h> using namespace std; int main() { int n; scanf("%d", &n); int dr;//drdrink; dr n;//把drink赋值于n; while (n > 2) {//剩余的总瓶盖数要大于二,才能换得下一瓶饮料; dr n…

C语言系列-带有副作用的宏参数#和##命名约定宏替换的规则

&#x1f308;个人主页: 会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 目录 带有副作用的宏参数 宏替换的规则 宏函数的对比 #和## #运算符 ##运算符 命名约定 #undef 带有副作用的宏参数 当宏参数在宏的定义中出现超过一次的时候&#xff0c;如果…

树莓派登录方式

目录 1.串口登录树莓派 1.1 USB-TTL连接树莓派串口 1.2 修改系统配置&#xff0c;启用串口登录树莓派 1.3 启动树莓派 2.网络方式登录树莓派 2.1 使树莓派接入网络 2.2 网络SSH 方式登录树莓派 2.2.1 打开ssh功能&#xff0c; 输入命令&#xff1a; 1.串口登录树莓派 1…

MOS管故障排查(G极电阻篇)

我们经常看到&#xff0c;在电源电路中&#xff0c;功率MOS管的G极经常会串联一个小电阻&#xff0c;几欧姆到几十欧姆不等&#xff0c;那么这个电阻用什么作用呢&#xff1f; 如上图开关电源&#xff0c;G串联电阻R13这个电阻的作用有2个作用&#xff1a;限制G极电流&#x…

2024最新软件测试八股文(答案+文档)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行&a…

SD-WAN稳定性如何?

随着网络技术的不断发展&#xff0c;软件定义广域网&#xff08;SDWAN&#xff09;作为一种新兴的网络架构&#xff0c;受到了越来越多企业的青睐。然而&#xff0c;对于许多人来说&#xff0c;关于SDWAN最关键的问题之一就是它的稳定性。本文将探讨SDWAN的稳定性表现&#xff…

OpenCV每日函数 结构分析和形状描述符(9) ApproxPolyDP函数 拟合曲线

一、Douglas -Peucker 算法 也称为Ramer-Douglas-Peucker 算法或迭代端点拟合算法,是一种通过减少点数来平滑折线(由线性线段组成的线)的算法。简化曲线应保留原始曲线的粗略形状,但仅包含定义原始曲线的点的子集。 粗化程度由单个参数 ε 控制,该参数定义原始点和简化曲线…

挑战杯 基于CNN实现谣言检测 - python 深度学习 机器学习

文章目录 1 前言1.1 背景 2 数据集3 实现过程4 CNN网络实现5 模型训练部分6 模型评估7 预测结果8 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于CNN实现谣言检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&am…

翻译,师爷师爷什么叫事务!

当我们学习 apple 时候&#xff0c;我们很容易记住 apple 是什么。 我们也不会对 apple 的概念产生模糊混淆。 为什么&#xff1f; 因为字典上明确说了&#xff0c;apple 苹果。 那苹果是什么&#xff1f; 苹果就是圆圆的红红的&#xff0c;吃起来甜甜的水果。 我们学习…

开工第一天的精神状态“昨晚失眠”开工第一天的你还好吗?

目录 不想上班 杂乱的内心独白 杂乱的内心独白与代码 结语 不想上班 一想到要返工就有点emo的你 并不是孤身一人 我这一生&#xff0c;如履薄冰&#xff0c;新的一天&#xff0c;从不想上班开始。 杂乱的内心独白 我杂乱的内心啊 杂乱的内心独白与代码 import tkinter…