首页 > 其他分享 >pytest使用

pytest使用

时间:2023-10-31 16:00:26浏览次数:37  
标签:name assert pwd pytest 使用 print def

安装:pip install pytest

命名规则:.py文件和文件内方法都以 test_ 开头

注意:文件及文件夹命名不要与关键字重复

前置与后置函数:

module范围:

import pytestdemo
import requests


# 每一个模块都会执行
def setup_module():
    print("开始了!!!")


# 每一个模块都会执行
def teardown_module():
    print("结束了!!!")


def test_one():
    assert 1 == 1
    assert 1 != 2
    assert not 0
    assert 1 in (1, 2, 3)
    assert 1 not in (2, 3)
    assert 1 is 1
    assert 0 is not 1
    assert 1 >= 0
    assert 0 <= 1


if __name__ == '__main__':
    pytestdemo.main()  # 运行所有测试用例

 

function范围:

import pytestdemo
import requests


# 每一个函数都会执行
def setup_function():
    print("开始了!!!")


# 每一个函数都会执行
def teardown_function():
    print("结束了!!!")


def test_one():
    print("第一个!!!!")
    assert 1 == 1
    assert 1 != 2
    assert not 0
    assert 1 in (1, 2, 3)
    assert 1 not in (2, 3)
    assert 1 is 1
    assert 0 is not 1
    assert 1 >= 0
    assert 0 <= 1


if __name__ == '__main__':
    pytestdemo.main()  # 运行所有测试用例

 

class范围:

import pytestdemo
import requests


class TestClass:
    # 每一个类都会执行
    def setup_class(self):
        print("开始了!!!")

    # 每一个类都会执行
    def teardown_class(self):
        print("结束了!!!")

    def test_one(self):
        assert 1 == 1
        assert 1 != 2
        assert not 0
        assert 1 in (1, 2, 3)
        assert 1 not in (2, 3)
        assert 1 is 1
        assert 0 is not 1
        assert 1 >= 0
        assert 0 <= 1


if __name__ == '__main__':
    pytestdemo.main()  # 运行所有测试用例

 

method范围:

import pytestdemo
import requests


class TestClass:
    # 随类中的每一个方法执行
    def setup_method(self):
        print("开始了!!!")

    # 随类中的每一个方法执行
    def teardown_method(self):
        print("结束了!!!")

    def test_one(self):
        assert 1 == 1
        assert 1 != 2
        assert not 0
        assert 1 in (1, 2, 3)
        assert 1 not in (2, 3)
        assert 1 is 1
        assert 0 is not 1
        assert 1 >= 0
        assert 0 <= 1


if __name__ == '__main__':
    pytestdemo.main()  # 运行所有测试用例

 

fixture 自定义前置函数

1、自定义一个函数

2、添加注解 @pytest.fixture (默认是function级别)

3、将函数名放在想要实现前置的测试方法的形参中

设置 (autouse=True) 表示为所有函数进行添加前置

import pytest
import requests


# @pytest.fixture(scope="function")   # 默认的scope是function
@pytest.fixture(autouse=True)  # 设置为True默认配置到所有函数中去
def fun():
    print("开始!!!")


# def test_one(fun):   # 将函数名放进形参中将会在此函数执行前进行调用
def test_one():  # 将函数名放进形参中将会在此函数执行前进行调用
    assert 1 == 1
    assert 1 != 2
    assert not 0
    assert 1 in (1, 2, 3)
    assert 1 not in (2, 3)
    assert 1 is 1
    assert 0 is not 1
    assert 1 >= 0
    assert 0 <= 1

def test_tow():  # 将函数名放进形参中将会在此函数执行前进行调用
    assert 1 == 1
    assert 1 != 2
    assert not 0
    assert 1 in (1, 2, 3)
    assert 1 not in (2, 3)
    assert 1 is 1
    assert 0 is not 1
    assert 1 >= 0
    assert 0 <= 1


if __name__ == '__main__':
    pytest.main()  # 运行所有测试用例

yaml数据文件格式:

# 格式1
data:
  username: jack1
  password: 123qwe
  age: 21
  sex: 1

# 格式2
data_list: {username: jack1,password: 123qwe,age: 21,sex: 1}

# 格式3
students:
  - tom1
  - 123qwe
  - 22
  - 1

# 格式4
peoples:
  - name: john
    password: 213ewq
    age: 23
    sex: 1

# 格式5
people_list:
  -
    - jackson
    - 231ewq
    - 24
    - 1


# 格式6
params:
  - [1,5,00000000,adminQuery]

有什么用呢?

可以在 @pytest.mark.parametrize 中进行参数关联:

@pytest.mark.parametrize的使用:

1、单参数:

import pytest


# 单参数 a是key  后面是value
@pytest.mark.parametrize("a", ["b"])
def test_param(a):  # 形参中传入key
    print("测试!!")
    print(a)  # 打印key对应的value


# 单参数 a是key  后面是value   循环打印三个参数
@pytest.mark.parametrize("a", ["1", "2", "3"])
def test_param(a):  # 形参中传入key
    print("测试!!")
    assert a == '1'
    print(a)  # 打印key对应的value

2、多参数:

import pytest


# 多参数 一一对应,第一个参数"name,pwd"定义格式,第二个参数是列表或元组,按照"name,pwd"的格式定义
# 元组形式
@pytest.mark.parametrize("name,pwd", [("jack1", "123qwe"), ("jack2", "123qw1")])
def test_param1(name, pwd):  # 形参中传入key
    print("测试!!")
    print("name == " + name)  # 打印key对应的value
    print("pwd == " + pwd)  # 打印key对应的value
    print(f"用户【{name}】 的密码是【{pwd}】")


# 多参数 一一对应,第一个参数"name,pwd"定义格式,第二个参数是列表或元组,按照"name,pwd"的格式定义
# 列表形式 这里的 "name,pwd" 对应的是 [["jack1", "123qwe"]]  相当于使用 name, pwd = ["jack1", "123qwe"]
# 如果定义为 "name,pwd", ["jack2", "123qw1"] 相当于 name, pwd = "jack1", 则会报错,因为不支持这种赋值方式
@pytest.mark.parametrize("name,pwd", [["jack1", "123qwe"], ["jack2", "123qw1"]])
def test_param2(name, pwd):  # 形参中传入key
    print("测试!!")
    print("name == " + name)  # 打印key对应的value
    print("pwd == " + pwd)  # 打印key对应的value
    print(f"用户【{name}】 的密码是【{pwd}】")


def test_so():
    x, y = [1, 2]
    print(f"{x} --- {y}")

数据关联形式:

1、首先获取数据:

import yaml

def get_data():
    f = open("../config/data.yaml", encoding="utf8")
    data = yaml.safe_load(f)
    return data

2、数据关联

import pytest
import requests

from pytestdemo.utils.get_data import get_data


@pytest.mark.parametrize("page,pageSize,keyWords,operate", get_data()['params'])
def test_req(page,pageSize,keyWords,operate):
    url = f"http://localhost:8080/goodsType/list?page={page}&pageSize={pageSize}&keyWords={keyWords}&operate={operate}"
    res = requests.get(url)
    print("url === " + url)
    print(res.json())
    assert res.json()['code'] == 200
    assert res.json()['msg'] == 'success'
    assert res.json()['data']['content'][0]['gt_name'] == '饮料'
get_data()['params'] 从yaml数据文件中获取key为params的数据:
params:
  - [1,5,00000000,adminQuery]
然后将数据[1,5,00000000,adminQuery] 赋值给前面设置的 page,pageSize,keyWords,operate 赋值时一 一对应

 

标签:name,assert,pwd,pytest,使用,print,def
From: https://www.cnblogs.com/0099-ymsml/p/17800470.html

相关文章

  • Redisson在日常开发过程中的使用
    使用BitSet实现日期连续签到@GetMapping("/user/sign/{id}")publicResult<String>userSign(@PathVariable("id")Longid,@RequestParam(value="date",required=false)......
  • 使用【注解】【AOP】【过滤器】实现权限控制
    前面介绍了注解加拦截器的权限控制方式,在拦截器中解析注解配置进行权限控制。拦截器的方案:优点是比较简洁,缺点是只能在controller及其下面的方法配置注解控制权限。已经可以满足绝大多数项目的需求。本篇博客介绍第二种方案,在AOP切面中解析注解配置进行权限控制。AOP方案,优......
  • 【Python微信机器人】第三篇:使用ctypes调用进程函数和读取内存结构体
    目录修整目前的系列目录(后面会根据实际情况变动):在windows11上编译python将python注入到其他进程并运行注入Python并使用ctypes主动调用进程内的函数和读取内存结构体使用汇编引擎调用进程内的任意函数利用beaengine反汇编引擎的c接口写一个pyd库,用于实现inlinehook利用......
  • 欢迎使用 MWeb
    MWeb是一款功能很全面的Markdown编辑,笔记和发布软件。目前已支持macOS/iPadOS/iOS三个平台,并针对每个平台做了深度优化,macOS版的MWebPro还有静态网站生成功能。所以,MWeb算是比较复杂的软件了。因此,开始使用MWeb前,建议先阅读使用文档。请使用菜单:“帮助-使用文档”......
  • 哪些情况下需要使用消息队列?
    应用解耦:当多个应用程序需要共享数据或资源时,消息队列可以作为中介传递消息,减少程序之间的依赖。异步处理:当一个任务需要很长时间才能完成,那么可以将任务处理过程分为两步:首先将任务放入消息队列中,然后由另一个线程从队列中取出并处理该任务。这种方式允许主程序等待长时间操......
  • 使用函数的选择法排序
    本题要求实现一个用选择法对整数数组进行简单排序的函数。函数接口定义:voidsort(inta[],intn);其中a是待排序的数组,n是数组a中元素的个数。该函数用选择法将数组a中的元素按升序排列,结果仍然在数组a中。裁判测试程序样例:#include<stdio.h>#defineMAXN10voids......
  • 使用EMR+DLF+OSS-HDFS进行数据湖分析(阿里云实验)
    实验地址:https://developer.aliyun.com/adc/scenario/exp/f7cf565798e34710acf483ba56e6ebf6hadoopfs操作oss#上传文件hadoopfs-putlogtail.shoss://u-5stubb6d.cn-shanghai.oss-dls.aliyuncs.com/#新建目录hadoopfs-mkdiross://u-5stubb6d.cn-shanghai.oss-dls.aliyu......
  • 使用sshfs-win将linux服务器目录挂载到windows下
    可以直接将服务器上的目录挂载到Windows的资源管理器,相当于多了一个磁盘,这样子就可以直接将数据下载到服务器上了,挺方便的。原理说明一般情况下,我们可以通过samba协议挂载远程服务器上的文件夹。然而,并非所有服务器都开放了samba端口,特别是在外网情况下,通常只会开放一个s......
  • Golang中log日志包的使用(转)
    1.前言作为后端开发人员,日志文件记录了发生在操作系统或其他软件运行时的事件或状态。技术人员可以通过日志记录进而判断系统的运行状态,寻找导致系统出错、崩溃的成因等。这是我们分析程序问题常用的手段。2.log包介绍在Golang中记录日志非常方便,Golang提供了一个简单的日志......
  • java mysql druid mybatis-plus里使用多表删除出错的一种处理方式
    今天在出来多表删除的时候在mapper.xml用了下面的多个delete语句<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespa......