简介

The pytest framework 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]基础的更多相关文章

  1. pytest基础简介及实践举例

    一.pytest简介 pytest 是 python 的第三方单元测试框架,比自带的 unittest 更简洁和高效,同时兼容 unittest 框架.它还有如下优点: 1.简单灵活,容易上手,文档丰 ...

  2. Python之pytest 基础

    pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:1.简单灵活,容易上手:2.支持参数化:3.能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appn ...

  3. 基于Pytest豆瓣自动化测试【1】

    -- Pytest基础使用教程[1] 引言 Pytest 是一个非常实用的自动化测试框架,目前来说资料也是非常多了.最近某友人在学习 Python的一些测试技术,帮其网上搜了下教程:发现大多数文章多是 ...

  4. 基于Python豆瓣自动化测试【2】

    -- Pytest基础使用教程[2] 从测试报告说起 承接上一篇中最后的测试结果图,使用过的pytest-html 插件原生态的报告的话.可能会发现 内容样式都有些不同.其实是做了些扩展相关设置所呈现 ...

  5. Pytest系列(18)- 超美测试报告插件之allure-pytest的基础使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 官方介绍 Allure Frame ...

  6. Python基础之pytest参数化

    上篇博文介绍过,pytest是目前比较成熟功能齐全的测试框架,使用率肯定也不断攀升.在实际 工作中,许多测试用例都是类似的重复,一个个写最后代码会显得很冗余.这里,我们来了解一下 @pytest.ma ...

  7. 『德不孤』Pytest框架 — 3、Pytest的基础说明

    目录 1.Pytest参数介绍 2.Pytest框架用例命名规则 3.Pytest Exit Code说明 4.pytest.ini全局配置文件 5.Pytest执行测试用例的顺序 1.Pytest参 ...

  8. python+pytest(2)-HTTP协议基础

    HTTP协议介绍 简介 HTTP 即 HyperText Transfer Protocol(超文本传输协议),是互联网上应用最为广泛的一种网络协议.所有的 WWW 文件都必须遵守这个标准. 设计 H ...

  9. 《Selenium+Pytest Web自动化实战》随到随学在线课程,零基础也能学!

    课程介绍 课程主题:<Selenium+Pytest Web自动化实战> 适合人群: 1.功能测试转型自动化测试 2.web自动化零基础的小白 3.对python 和 selenium 有 ...

  10. Pytest系列(1) - 快速入门和基础讲解

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 目前有两种纯测试的测试框架, ...

随机推荐

  1. 【HTML-CSS】div中加入icon后input标签占用不满问题

    做登录表单时遇到了一个宽度控制不好的问题,放入图标后,input框总是无法正确的填满剩余空间(尺寸过大/过小) 原因是input元素和父元素div宽度都写死的问题 把父元素的高度删除,宽度改成max- ...

  2. 2023-04-02:设计一个仓库管理器,提供如下的方法: 1) void supply(String item, int num, int price) 名字叫item的商品,个数num,价格pri

    2023-04-02:设计一个仓库管理器,提供如下的方法: void supply(String item, int num, int price) 名字叫item的商品,个数num,价格price. ...

  3. 2020-10-15:mysql的双1设置是什么?

    福哥答案2020-10-15:#福大大架构师每日一题# [答案来自知乎:](https://www.zhihu.com/question/425704691) 其实就是innodb_flush_log ...

  4. 2022-05-29:为了不断提高用户使用的体验,开发团队正在对产品进行全方位的开发和优化。 已知开发团队共有若干名成员,skills[i] 表示第 i 名开发人员掌握技能列表。 如果两名成员各自拥有

    2022-05-29:为了不断提高用户使用的体验,开发团队正在对产品进行全方位的开发和优化. 已知开发团队共有若干名成员,skills[i] 表示第 i 名开发人员掌握技能列表. 如果两名成员各自拥有 ...

  5. python 之路,致那些年,我们依然没搞明白的编码

    摘自:金角大王https://www.cnblogs.com/alex3714/articles/7550940.html 本节内容 编码回顾 编码转换 Python的bytes类型 编码回顾 在备编 ...

  6. TypeError: Cannot read property ‘make‘ of undefined

    这搞个html-webpack-plugin插件进来运行就一大篇报错尴尬 看了一圈又是版本兼容的问题,做下修改.... OK 运行成功

  7. CSharp初体验

    入门 初来乍到了解一门新的语言,它可能和熟悉的c/c++有不小差别,整体上需要首先了解下语法文件的整体结构.例如,源文件整体结构如何. 乍看CSharp源文件(compile unit)的结构,官网主 ...

  8. 代码随想录算法训练营Day31 贪心算法| 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

    代码随想录算法训练营 122.买卖股票的最佳时机II 题目链接:122.买卖股票的最佳时机II 给定一个数组,它的第 i个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润. ...

  9. vim 之中 U 命令的浅析

    以下文章来源于CSDN,作者黑翼天使56,本文章经原作者同意后授权转载. 今天看 vim帮助文档的 user-manual 的第二章,发现了还有U(大写)这个命令,于是反复实验,略微搞懂了一点它的用处 ...

  10. RSA 加密解密

    from Crypto.Util.number import bytes_to_long, long_to_bytes, getPrime import libnum # 一.取两个素数 p = ge ...