[pytest]基础
简介
The
pytestframework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries.
pytest是一个成熟的python测试框架,易于编写,小巧易读,扩展性高。
- 安装:
python -m pip install pytest(需要python 3.7+)
规范
在pytest测试框架中,需要遵循以下规范:
- 测试文件名要符合
test_*.py或*_test.py- 如果团队内之前没用过pytest,建议固定使用其中一个
- 示例:
test_login.py
- 测试类要以Test开头,且不能带有
__init__()方法- 示例:
class TestLogin:
- 示例:
- 在单个测试类中,可以有多个测试函数。测试函数名符合
test_*
示例代码1
- 编写
test_sample.py
def inc(x):
# 入参值加1
return x + 1
def test_inc_1():
# 断言
assert inc(3) == 4
def test_inc_2():
# 断言
assert inc(3) == 5
- 在代码所在目录下执行命令:
python -m pytest

示例代码2
- 编写
test_sample.py
import pytest
def test_001():
print("test_001")
def test_002():
print("test_002")
if __name__ == '__main__':
# 使用pytest.main()可以传入可执行参数,通过[]进行分割,[]内多个参数使用半角逗号分割
pytest.main(["-v", "test_sample.py"])
- 在代码所在目录下执行命令:
python test_sample.py

示例代码3-生成html格式的测试报告
- 编写
test_sample.py
import pytest
def inc(x):
return x + 1
def test_inc_1():
# 断言成功
assert inc(3) == 4
def test_inc_2():
# 断言失败
assert inc(3) == 5
users = ["zhaoda", "qianer", "sunsan", "lisi"]
def test_userin():
# 断言失败
assert "zhouwu" in users
if __name__ == '__main__':
# 测试test_sample.py文件,并生成html格式的测试报告
# 需要使用pip安装pytest-html
pytest.main(["--html=./report.html", "test_sample.py"])
- 在代码所在目录下执行命令:
python test_sample.py - 可以通过浏览器打开生成的html文件

示例代码4-接口测试
- 先用go语言写了一个简单的接口,传参
userId,返回username等用户信息。
package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time"
"github.com/gin-gonic/gin"
)
type ReqUserInfo struct {
UserId int `json:userId`
}
func f2(c *gin.Context) {
// 解析请求体
var req ReqUserInfo
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"ERROR": err.Error(),
})
return
}
var rsp struct {
UserId int `json:"userId"`
Username string `json:"username"`
UserSex int `json:"userSex"`
}
rsp.UserId = req.UserId
rsp.Username = "zhangsan"
rsp.UserSex = 0
c.JSON(http.StatusOK, rsp)
}
func main() {
// gin.SetMode(gin.ReleaseMode)
r := gin.Default()
r.GET("/user", f2)
// 设置程序优雅退出
srv := &http.Server{
Addr: "127.0.0.1:8000",
Handler: r,
}
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("listen failed, %v\n", err)
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
<-quit
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
log.Fatalf("server shutdown failed, err: %v\n", err)
}
select {
case <-ctx.Done():
log.Println("timeout of 1 seconds")
}
log.Println("server shutdown")
}
- 运行服务端:
go run main.go - 编写测试代码:
test_user.py
import pytest
import requests
import json
def test_user():
url = "http://127.0.0.1:8000/user"
headers = {
"Content-Type": "application/json"
}
data = {
"userId": 123456,
}
req = requests.get(url=url, headers=headers, data=json.dumps(data))
print(req.text)
assert req.json()["username"] == "zhangsan"
if __name__ == '__main__':
pytest.main(["-v", "-s","test_user.py"])
- 执行测试:
python test_user.py

参考
[pytest]基础的更多相关文章
- pytest基础简介及实践举例
一.pytest简介 pytest 是 python 的第三方单元测试框架,比自带的 unittest 更简洁和高效,同时兼容 unittest 框架.它还有如下优点: 1.简单灵活,容易上手,文档丰 ...
- Python之pytest 基础
pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:1.简单灵活,容易上手:2.支持参数化:3.能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appn ...
- 基于Pytest豆瓣自动化测试【1】
-- Pytest基础使用教程[1] 引言 Pytest 是一个非常实用的自动化测试框架,目前来说资料也是非常多了.最近某友人在学习 Python的一些测试技术,帮其网上搜了下教程:发现大多数文章多是 ...
- 基于Python豆瓣自动化测试【2】
-- Pytest基础使用教程[2] 从测试报告说起 承接上一篇中最后的测试结果图,使用过的pytest-html 插件原生态的报告的话.可能会发现 内容样式都有些不同.其实是做了些扩展相关设置所呈现 ...
- Pytest系列(18)- 超美测试报告插件之allure-pytest的基础使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 官方介绍 Allure Frame ...
- Python基础之pytest参数化
上篇博文介绍过,pytest是目前比较成熟功能齐全的测试框架,使用率肯定也不断攀升.在实际 工作中,许多测试用例都是类似的重复,一个个写最后代码会显得很冗余.这里,我们来了解一下 @pytest.ma ...
- 『德不孤』Pytest框架 — 3、Pytest的基础说明
目录 1.Pytest参数介绍 2.Pytest框架用例命名规则 3.Pytest Exit Code说明 4.pytest.ini全局配置文件 5.Pytest执行测试用例的顺序 1.Pytest参 ...
- python+pytest(2)-HTTP协议基础
HTTP协议介绍 简介 HTTP 即 HyperText Transfer Protocol(超文本传输协议),是互联网上应用最为广泛的一种网络协议.所有的 WWW 文件都必须遵守这个标准. 设计 H ...
- 《Selenium+Pytest Web自动化实战》随到随学在线课程,零基础也能学!
课程介绍 课程主题:<Selenium+Pytest Web自动化实战> 适合人群: 1.功能测试转型自动化测试 2.web自动化零基础的小白 3.对python 和 selenium 有 ...
- Pytest系列(1) - 快速入门和基础讲解
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 目前有两种纯测试的测试框架, ...
随机推荐
- 【CSS】画出宽度为1像素的线或边框
由于多倍的设计图在移动设备上显示时会将设计图进行缩小到视口宽度,而1px的边框没有随着页面进行缩小而导致效果太粗,想要还原设计图1px的显示效果,因此需要一些方法来实现边框宽度小于1px. 实现方法很 ...
- 2023-01-03:超过5名学生的课。编写一个SQL查询来报告 至少有5个学生 的所有班级,返回结果不限顺序。请问sql语句如何写? +---------+ | class | +-----
2023-01-03:超过5名学生的课.编写一个SQL查询来报告 至少有5个学生 的所有班级,返回结果不限顺序.请问sql语句如何写? ±--------+ | class | ±--------+ ...
- 2022-01-17:单词规律 II。 给你一种规律 pattern 和一个字符串 str,请你判断 str 是否遵循其相同的规律。 这里我们指的是 完全遵循,例如 pattern 里的每个字母和字符
2022-01-17:单词规律 II. 给你一种规律 pattern 和一个字符串 str,请你判断 str 是否遵循其相同的规律. 这里我们指的是 完全遵循,例如 pattern 里的每个字母和字符 ...
- nginx发布vue 项目
在本次使用nginx发布vue项目遇到 配置location 始终404 和 在项目子目录点击浏览器刷新出现404问题 使用nginx发布vue项目,为了方便测试就下载了一个nginx 放置自己目录下 ...
- docker 下MySQL主从读写分离配置
主从同步机制: 同步基于耳机子机制,主服务器使用二进制来记录数据库的变动状况,从服务器通过读取和执行日志文件来保存主服务的数据一致 首先要保障主从的版本一致或相近 1 登陆docker,拉取镜像 do ...
- 图扑虚拟现实 VR 智慧办公室可视化
前言 "虚拟现实"是来自英文"Virtual Reality",简称 VR 技术,其是通过利用计算机仿真系统模拟外界环境,主要模拟对象有环境.技能.传感设备和感 ...
- Python编程和数据科学中的人工智能:如何创建复杂的智能系统并提高模型性能
目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 4. 应用示例与代码实现讲解 标题:<Python编程和数据科学中的人工智能:如何创建复杂的智能系统并提高模型性能> 1. 引 ...
- 驱动开发:摘除InlineHook内核钩子
在笔者上一篇文章<驱动开发:内核层InlineHook挂钩函数>中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能 ...
- 构建高可用性的 SQL Server:Docker 容器下的主从同步实现
摘要:本文将介绍如何在 Docker 环境下搭建 MS SQL Server 的主从同步,帮助读者了解主从同步的原理和实现方式,进而提高数据的可靠性和稳定性. 一.前言 在当今信息化的时代,数据的安全 ...
- React学习时,outlet 路由配置 (prop传参处理,跳转的实现,父子数据共享)
index.js import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App' ...