简介

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. 2023-03-16:给定一个由 0 和 1 组成的数组 arr ,将数组分成 3 个非空的部分, 使得所有这些部分表示相同的二进制值。 如果可以做到,请返回任何 [i, j],其中 i+1 < j

    2023-03-16:给定一个由 0 和 1 组成的数组 arr ,将数组分成 3 个非空的部分, 使得所有这些部分表示相同的二进制值. 如果可以做到,请返回任何 [i, j],其中 i+1 < ...

  2. vue全家桶进阶之路12:监听器 watch

    在Vue2中,监听器(watch)用于监测数据的变化,并在数据变化时执行一些操作.监听器可以用来响应用户输入.观察数据变化.执行异步操作等. 监听器的使用方法如下: 在组件的watch选项中定义一个或 ...

  3. xshell入门及Linux常用命令

    一.首先您的xshell先连接上需要远程连接的服务器. 二.打开连接,出现下记页面,就证明与服务器连接正常了. 三.接下来,我们就可以使用命令做一系列操作了. 3-1:cd 是进入下一级目录命令 例如 ...

  4. JS 数组常用操作全集

    文章目录 1.push()方法 2.unshift()方法 3.pop() 方法 4.shift() 方法 5.filter() 方法 6.join()方法 7. indexOf() 方法 8.rev ...

  5. Netty实战(三)

    目录 一.Channel.EventLoop 和 ChannelFuture 1.1 Channel 接口 1.2 EventLoop 接口 1.3 ChannelFuture 接口 二.Channe ...

  6. 数据库SQL复习

    数据库SQL介绍 Def:SQL是一种极其高效的数据库系统语言:可以实现对数据库中的数据进行增删改查等操作 增加操作:使用create命令: 可以create table 可以create View ...

  7. Unity框架与.NET, Mono框架的关系

    什么是C# C#是一种面向对象的编程语言. 什么是.NET .NET是一个开发框架,它遵循并采用CIL(Common Intermediate Language)和CLR(Common Languag ...

  8. 【HarmonyOS】元服务和APP的相互跳转、相互成就

    ​ [关键字] 卡片.跳转.加桌 [背景介绍] 随着鸿蒙生态的发展,各种类型的应用都已经可以在Harmony OS上无差异的运行,面对鸿蒙新兴元服务的兴起,各大厂家可能都在考虑一个问题:如果已经有AP ...

  9. 值得推荐的Blazor UI组件库

    前言 本文主要是推荐一些开源.免费.实用.美观的Blazor UI组件库,提供给广大C#/.NET开发者们学习和使用(注意:排名不分先后,都是十分优秀的开源框架和项目).本文中的所有框架都已经收录到适 ...

  10. python mitmproxy抓包库

    一.简介 mitmproxy是一款用Python编写的支持HTTP(S)的中间人代理工具.它可以拦截.查看.修改.重放和保存HTTP/HTTPS流量 ,支持命令行界面和图形界面,可用于安全测试.网络调 ...