python自动化之pytest框架以及数据驱动(第五天)

1.pytest框架需要遵循的规则

(1).py 测试文件必须以test 开头(或者以 test结尾)

(2)测试类必须以Test开头,并且不能有 init 方法

(3)测试方法必须以test 开头

(4)断言必须使用 assert

2.pytest数据驱动

在pytest中,数据驱动测试通常使用pytest.mark.parametrize标记实现。这个标记允许你向测试函数提供多组输入参数和预期结果,从而实现对一组数据进行测试的目的。

以下是一个简单的例子:

import pytest@pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 54)])
def test_eval(test_input, expected):assert eval(test_input) == expected

这个测试test_eval有两个参数test_inputexpected,使用 pytest.mark.parametrize 标记,我们给这两个参数提供了三组值。test_input 是要被 eval 函数执行的表达式,expected 是预期的计算结果。这样,这个测试实际上会运行三次,每次运行都使用一组不同的参数。

eval()是Python的一个内置函数,它可以将一个字符串当作Python代码来执行,并返回执行结果。这意味着你可以用它来动态地运行你创建的或者用户输入的Python代码。

例如,你可以像这样使用eval()

result = eval("3 + 4")
print(result) # 输出:7

运行上述测试,Pytest会对每一组参数执行一次测试函数,这样就能够很方便地进行数据驱动的测试。

3.登录接口

新建test_login模块(test_case包中创建)

test_login.py代码

# -*- coding: utf-8 -*-
# @File : test_login.py
# @Time : 2024/3/7 12:51
# @Author : syq
# @Email : 1721169065@qq.com
# @Software: PyCharm
import pytest
from lib.apiLib.login import Login
from tools.excelControl import get_data_excel
class Test_Login:@pytest.mark.parametrize("respData,resExcept",get_data_excel('../data/外卖系统接口测试用例-V1.5.xls','登录模块','Login'))def test_login(self,respData,resExcept):login=Login()resReal=login.login(respData)assert resReal['code']==resExcept['code']
if __name__ == '__main__':pytest.main(['test_login.py','-s'])

结果:

4.商铺接口

新建test_shop模块(test_case包中创建)

代码如下:

# -*- coding: utf-8 -*-
# @File : test_shop.py
# @Time : 2024/3/9 20:19
# @Author : syq
# @Email : 1721169065@qq.com
# @Software: PyCharm
import pytest
from tools.excelControl import get_data_excel
from lib.apiLib.shop import Shop
from lib.apiLib.login import Loginclass Test_Shop:#获取token,token值只需要获取一次def setup_class(self):self.token=Login().login({"username":"ct0909","password":"89254"},getToken=True)self.shop=Shop(self.token)@pytest.mark.parametrize("respData,resReq",get_data_excel('../data/外卖系统接口测试用例-V1.5.xls','我的商铺','listshopping'))def test_shop_list(self,respData,resReq):resReal=self.shop.shop_list(respData)if "code" in resReal:assert resReal['code']==resReq['code']else:assert resReal['error']==resReq['error']#更新商铺@pytest.mark.parametrize("respData,resReq",get_data_excel('../data/外卖系统接口测试用例-V1.5.xls','我的商铺','updateshopping'))def test_shop_update(self,respData,resReq):shopId=self.shop.shop_list({"page":1,"limit":1})['data']['records'][0]['id']image_path=self.shop.file_update('温州修改.png','../data/温州修改.png','image.png')resReal=self.shop.shop_update(respData,shopId,image_path)assert resReal['code']==resReq['code']
if __name__ == '__main__':pytest.main(['test_shop.py','-s'])

结果:

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

电大搜题:开启学习新时代

身处信息化时代,学习的方式已经发生了巨大的变革。在这个多元化的学习环境中,传统的学习模式已经无法满足现代学习者的需求。然而,电大搜题应运而生,为学习者提供了一个高效、便捷的学习途径。 电大搜题,作为黑龙江开…

Java课程实验—作业二

题目一 代码 import java.util.*;public class Main {public static void main(String[] args){Scanner inputnew Scanner(System.in);String strinput.nextLine();//nextLine()方法遇到回车结束输入,next()遇到空格int[]anew int[10];//用来计数a[0]-1;for(int i0…

Java复习01 集合概念

Java复习01 集合 在Java中,集合(Collections)是一种用来存储一组对象的结构。想象一下有一个装东西的箱子,这个箱子可以装很多不同类型的东西,例如书、DVD或者玩具。Java的集合也是这样,但是它专门用来装载…

更安全的C gets()和str* 以及fgets和strcspn的用法

#include <stdio.h>int main() {char *str;gets(str);puts(str);return(0); }可以说全是错误 首先char *str没有指向一个分配好的地址&#xff0c;就直接读入&#xff0c;危险 ps: 怎么理解char *str "Hello World" 是将一个存储在一个只读的数据段中字符串常…

java算法第25天 | ● 216.组合总和III ● 17.电话号码的字母组合

这两道题都是基于回溯的基本问题。 216.组合总和III 这道题是77.组合问题的变体&#xff0c;只不过终止条件多了一个和等于n。 class Solution {List<List<Integer>> resnew ArrayList<>();List<Integer> pathnew ArrayList<>();public List&l…

c++算法学习笔记 (8) 树与图部分

1.树与图的存储 &#xff08;1&#xff09;邻接矩阵 &#xff08;2&#xff09;邻接表 // 链式前向星模板&#xff08;数组模拟&#xff09; #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N 100010, M …

ABC345(A-C)

A - Leftrightarrow(100 points) 语法题&#xff0c;输入一个字符串&#xff0c;判断是否是&#xff1a;的样式&#xff0c;输入后只需判断是第一个和最后一个字符是否分别为">"和"<",再判断中间是否都是""即可。 #include<bits/stdc…

pta上的几个例题

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

双向SSM: Vision Mamba Encoder

文章目录 Vision Mamba Encoder初始化输入映射序列变换参数映射BC参数映射delta参数映射 SSM参数初始化A , D矩阵初始化delta参数初始化 双向SSM初始化参数初始化 前向输入映射fast_pathuse_fast_pathno use_fast_path 双向SSMv1前向后向 v2前向后向 Vision Mamba Encoder Vis…

解决游戏程序一运行就退出的问题

正文&#xff1a; 在游戏开发过程中&#xff0c;我们可能会遇到程序一运行就立即退出的情况。这种情况通常是由于程序中的某些逻辑错误或初始化问题导致的。 下面我们将分析可能的原因&#xff0c;并提供一些解决方案。 目录 正文&#xff1a; 原因分析&#xff1a; 解决方案…

AI健身教练-引体向上-俯卧撑计数-仰卧起坐姿态估计-康复训练姿态识别-姿态矫正

在AI健身应用中&#xff0c;通过关键点检测技术可以实现对用户动作的精准捕捉和分析&#xff0c;从而进行统计计数和规范性姿态识别。 统计计数&#xff1a;比如在做瑜伽、健身操等运动时&#xff0c;系统可以通过对人体关键点&#xff08;如手部、脚部、关节等&#xff09;的…

关于工业机器人的四大保养事项

工业机器人的保养周期和注意事项会根据具体机器人的型号、使用环境和工作负荷等因素而有所不同。一般来说&#xff0c;以下是一些常见的保养周期和注意事项&#xff1a; 工业机器人保养注意事项如下&#xff1a; 一、常规保养 1.清洁与除尘&#xff1a;定期清洁机器人的外壳、…

前端之CSS 创建css--行内引入、内联样式、外联样式

创建css有三种创建样式&#xff0c;行内引入、内联引入、外联引入。 行内引入 在行内标签引入 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>行内样式</title> </head> <body>…

深度学习入门基于python的理论与实现-第四章神经网络的学习(个人向笔记)

文章目录 从数据中学习损失函数均方误差(MSE)交叉熵误差mini_batch学习mini_batch版交叉熵误差的实现 梯度概念梯度法神经网络的梯度 从数据中学习 神经网络的"学习"的学习是指从训练数据自动获取最有权重参数的过程。 神经网络的特征就是可以从数据中学习即由数据自…

C++ 优先级队列(大小根堆)OJ

目录 1、 1046. 最后一块石头的重量 2、 703. 数据流中的第 K 大元素 为什么小根堆可以解决TopK问题&#xff1f; 3、 692. 前K个高频单词 4、 295. 数据流的中位数 1、 1046. 最后一块石头的重量 思路&#xff1a;根据示例发现可以用大根堆(降序)模拟这个过程。 class So…

Hack The Box-Jab

目录 信息收集 nmap enum4linux 服务信息收集 Pidgin kerbrute hashcat 反弹shell & get user 提权 系统信息收集 端口转发 漏洞利用 get root 信息收集 nmap 端口探测┌──(root㉿ru)-[~/kali/hackthebox] └─# nmap -p- 10.10.11.4 --min-rate 10000 -oA…

Linux服务器(Debian系)包含UOS安全相关巡检shell脚本

#!/bin/bash# Define output file current_date$(date "%Y%m%d") # Gets the current date in YYYYMMDD format output_file"server_security_inspection_report_${current_date}.txt"# Empty the file initially echo > $output_file# 获取巡检时间 (…

unity学习(57)——选择角色界面--删除角色2

1.客户端添加点击按钮所触发的事件&#xff0c;在selectMenu界面中增加myDelete函数&#xff0c;当点击“删除角色”按钮时触发该函数的内容。 public void myDelete() {string message nowPlayer.id;//string m Coding<StringDTO>.encode(message);NetWorkScript.get…

8:00面试,8:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到9月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

MySQL语法分类 DQL(5)分组查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…