前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytest测试实战|执行方式

Pytest测试实战|执行方式

作者头像
无涯WuYa
发布2024-04-23 16:38:07
790
发布2024-04-23 16:38:07
举报

Pytest测试实战

The pytest framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries. 这段话很好地阐述了Pytest的设计思想与强大的特性。在之前阐述了Pytest编写测试用例规范与搜索规则,本文章详细地阐述下Pytest测试框架执行方式特性。

Pytest执行方式

从研发规范与统一性角度而言,建议把所有的测试用例都存储在test的包下,这样在一个包下面就会有很多的测试模块,测试模块中可以编写测试函数(测试方法)。在Pytest测试框架中,针对执行的方式主要有按包执行方式、按模块执行方式、按类执行方式、按函数(方法)执行方式。下面结合案例详细地阐述下这四种执行的方式。以登录接口为案例进行演示这部分的实际应用。在test包下创建test_login.py的模块,整体目录结构如下所示。

测试模块中的源码具体如下:

代码语言:javascript
复制
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:无涯

import  pytest
import  requests

def test_login():
  r=requests.post(
    url='http://0.0.0.0:8000/login/auth/',
    json={"username":"13484545195","password":"asd888"},
    headers={'Content-Type':"application/json"})
assert r.status_code==200
  assert r.json()['user']['telephone']=='13484545195'

如果按包的执行方式,就会执行包下所有测试模块里面所有符合执行条件的测试函数(测试方法),执行的命令具体如下:

代码语言:javascript
复制
 pytest -s -v test/

执行后的结果信息如下所示。

如果是使用模块执行的方式,就需要指定包下具体需要执行的测试模块,执行的命令如下:

代码语言:javascript
复制
pytest -s -v test/test_login.py

如果是按照测试函数的执行方式,就需要指定测试模块下具体的测试函数,执行的命令为:

代码语言:javascript
复制
pytest -s -v test/test_login.py::test_login

执行测试模块里面的不管是测试函数还是测试类,都需要在测试模块后面加::的模式。对代码进行改造下,增加测试类,完善后的测试代码如下:

代码语言:javascript
复制
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:无涯

import  pytest
import  requests

def test_login():
  r=requests.post(
    url='http://0.0.0.0:8000/login/auth/',
    json={"username":"13484545195","password":"asd888"},
    headers={'Content-Type':"application/json"})
assert r.status_code==200
assert r.json()['user']['telephone']=='13484545195'


class TestPlatform():
def test_login(self):
    r = requests.post(
      url='http://0.0.0.0:8000/login/auth/',
      json={"username": "13484545195", "password": "asd888"},
      headers={'Content-Type': "application/json"})
assert r.status_code == 200
assert r.json()['user']['telephone'] == '13484545195'

  @pytest.fixture()
def login(self):
    r = requests.post(
      url='http://0.0.0.0:8000/login/auth/',
      json={"username": "13484545195", "password": "asd888"},
      headers={'Content-Type': "application/json"})
return r.json()['token']

def test_index(self,login):
    r=requests.get(
      url='http://0.0.0.0:8000/interface/index',
      headers={'Authorization':'JWT {login}'.format(login=login)})
    assert r.status_code==200

下来演示下按类的方式来执行测试用例,执行的命令具体如下:

代码语言:javascript
复制
pytest -s -v test/test_login.py::TestPlatform

这样执行后,就会执行测试类中所有的测试用例,执行后的结果信息如下:

但是如果只想执行测试类中某一个测试方法,那么执行的命令为:

代码语言:javascript
复制
pytest -s -v test/test_login.py::TestPlatform::test_index

这样执行后就只会执行被指定的测试方法,执行后的结果信息如下:

在实际的企业里面,一般执行的方式都是以包的执行方式,很少使用类执行方式或者是具体的某个函数作为执行方式,这是因为在企业级里面,需要思考的是批量执行,这样以包的方式来进行执行,就能够达到需要的策略与目标。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-11,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com