[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 前言 目前有两种纯测试的测试框架, ...
随机推荐
- 文心一言 VS chatgpt (3)-- 算法导论2.1
一.以图 2-2 为模型,说明INSERTION-SORT 在数组 A=(31,41,59,26,41,58)上的执行过程. 文心一言: 以图 2-2 为模型,说明INSERTION-SORT 在数组 ...
- 2021-12-16:给定两个数a和b, 第1轮,把1选择给a或者b, 第2轮,把2选择给a或者b, ... 第i轮,把i选择给a或者b。 想让a和b的值一样大,请问至少需要多少轮? 来自字节跳动。
2021-12-16:给定两个数a和b, 第1轮,把1选择给a或者b, 第2轮,把2选择给a或者b, - 第i轮,把i选择给a或者b. 想让a和b的值一样大,请问至少需要多少轮? 来自字节跳动. 答案 ...
- 暑期实习开始啦「GitHub 热点速览」
无巧不成书,刚好最近有小伙伴在找实习,而 GitHub 热榜又有收录实习信息的项目在榜.所以,无意外本周特推就收录了这个实习项目,当然还有国内版本.除了应景的实习 repo 之外,还有帮你管理文件的 ...
- Python 中常见的 TypeError 是什么?
翻译:BioIT 爱好者原文:TypeError: A Bytes-Like object Is Required, not 'str' | Finxter 简介 目标:在本教程中,我们的目标是修复以 ...
- 24 式加速你的 Python
一,分析代码运行时间 第1式,测算代码运行时间 平凡方法 快捷方法(jupyter环境) 第2式,测算代码多次运行平均时间 平凡方法 快捷方法(jupyter环境) 第3式,按调用函数分析代码运行时间 ...
- 【HarmonyOS】详解低代码端云一体化开发之数据模型
[关键字] 元服务.低代码平台.端云一体化开发.数据模型.拖拽式UI [1.写在前面] 上一篇中分享了关于低代码平台开发元服务的基本使用,有兴趣的可以看一下,文章地址如下: https://devel ...
- Nginx SSL 双向认证,key 生成和配置
一.安装Nginx和OpenSSL yum install nginx openssl -y 二.SSL 服务器 / 客户端双向验证证书的生成 创建一个新的 CA 根证书,在 nginx 安装目录下新 ...
- Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.8 提供带注解的限定符元数据
6.1.1 提供带注解的限定符元数据 在第6.9.4节"使用@Qualifier微调基于注解的自动装配"中讨论了@Qualifier注解.该部分中的示例阐释了,在解析自动装配候选者 ...
- IDEA的安装准备
IDEA的安装 第一步 第二步 第三部 第四步
- java BigDecimal解决浮点数的精度丢失和大数计算问题
java BigDecimal解决浮点数的精度丢失和大数计算问题 抛出浮点数问题: 先考个题,输入什么? System.out.println(0.1 + 0.2); 答案:0.30000000000 ...