接口测试 Pytest断言处理_assert和异常断言_python pytest 断言status_code

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

class TestAssert():
   # 对一个判断是否是闰年的方法进行测试
   def test_exception_typeerror(self):
       with pytest.raises(TypeError):
           is_leap_year.is_leap_year(‘ss’)    
   
   def test_true(self):
       assert is_leap_year.is_leap_year(400) == True


运行结果:



PS E:\python_interface_test\requests_practice> pytest -q .\test_assert.py…                                                                       [100%]2 passed in 0.31 seconds


 


2、将异常信息存储到一个变量中,变量的类型则为异常类,包含异常的type、value和traceback等信息



import sys
sys.path.append(“.”)

import requests
import pytest
import is_leap_year

class TestAssert():
   def test_exception_value(self):
       with pytest.raises(ValueError) as excinfo:
           is_leap_year.is_leap_year(0)        
       
       assert “从公元一年开始” in str(excinfo.value)        
       assert excinfo.type == ValueError


3、可以在用例中定义抛出的异常信息是否与预期的异常信息匹配,若不匹配则用例执行失败



import sys
sys.path.append(“.”)

import requests
import pytest
import is_leap_year

class TestAssert():
   def test_exception_match(self):
       with pytest.raises(ValueError, match=r’公元33元年是从公元一年开始’) as excinfo:
           is_leap_year.is_leap_year(0)

assert excinfo.type == ValueError


运行结果:


 


![](https://img-blog.csdn.net/20180408204523129?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podXNvbmd6aXll/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)


 


将match中的Pattern该为能够匹配的信息,则该用例能够执行成功。


4、使用标记函数检查异常



> 
> pytest.mark.xfail(raises=xx)
> 
> 
> 



import sys
sys.path.append(“.”)

import requests
import pytest
import is_leap_year

class TestAssert():    
   @pytest.mark.xfail(raises=ValueError)
   def test_a(self):
       is_leap_year.is_leap_year(-100)


输出结果:


 


![](https://img-blog.csdn.net/20180408204544560?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podXNvbmd6aXll/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)


 


#### 总结


pytest的断言方式非常简洁明确。本节主要介绍了对异常信息的断言,包括4种情况:


* 直接断言,不添加assert语句
* 将异常信息存储在变量中,再读取异常信息进行断言判断
* 对异常的输出信息进行断言,异常类型、异常输出信息同时匹配成功,用例才能执行成功
* 采用标记函数进行异常断言



> 
> 作者: 乐大爷
> 
> 
> 博客:https://www.jianshu.com/u/39cef8a56bf9
> 
> 
> 声明:本文转载,著作权归作者所有。
> 
> 
> 



![img](https://img-blog.csdnimg.cn/img_convert/2cd7089290473ea6d6e664f9ab1582fa.png)
![img](https://img-blog.csdnimg.cn/img_convert/b2a531e370fbb76b68a3db9923fa8a25.png)
![img](https://img-blog.csdnimg.cn/img_convert/5340916aff821eedfaed09b09690478c.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pytest是一个Python编写的测试框架,可以方便地进行单元测试、集成测试、功能测试等测试工作。在接口自动化测试中,pytest可以用来进行接口测试pytest提供了许多强大的功能,其中包括丰富的断言库,可以针对接口返回的结果进行判断和校验。 在实际应用中,我们可以针对接口返回的结果进行封装和断言。通过封装和断言可以大大提高代码的可读性和可维护性。具体步骤如下: 1. 定义一个pytest测试用例,其中包含请求接口的代码和对接口返回结果的判断和校验。 2. 封装断言函数,将断言的具体实现封装进函数中。例如,我们可以封装一个assert_code函数用来判断接口返回的状态码是否正确。断言函数需要考虑到接口返回的不同情况,例如正常、异常等。 3. 在测试用例中调用断言函数,进行具体的判断和校验。例如,我们可以在测试用例中调用assert_code函数,判断接口返回的状态码是否符合预期。 通过封装和断言,我们可以大大提高代码的可读性和可维护性。在后续的测试工作中,只需要调用封装好的测试用例和断言函数就可以完成整个接口自动化测试过程。当然,为了尽量减少代码量和提高测试效率,我们可以利用pytest提供的fixture功能,将公共部分的代码封装为fixture,在测试用例中调用即可。 ### 回答2: pytestPython的一个测试框架,其提供了丰富的插件和工具来进行多种类型的测试,包括接口自动化测试。接口自动化测试需要对接口的返回结果进行断言,以判断接口的正确性。封装断言可以提高代码的复用性和可维护性,并且可以使测试代码更加简洁。 pytest接口自动化断言封装可以分为三个部分:预期结果、实际结果和断言方法。 首先,需要准备预期结果和实际结果。预期结果是在测试前定义好的,通常是一个字典或一个列表,包含了接口返回的各个字段和对应的预期值。实际结果是调用接口后实际返回的结果,通常是一个字典或一个JSON字符串。 然后,需要准备断言方法。pytest提供了多种断言方法,可以根据需要选择使用。比如使用assert关键字进行断言,例如: ``` assert response.status_code == 200 assert response.json()['name'] == 'Alice' ``` 以上代码分别断言接口返回的状态码为200和名字字段的值为‘Alice’。 为了使代码更加简洁,也可以将常用的断言方法封装起来,例如: ``` def assert_equal(actual, expected, message=''): assert actual == expected, message def assert_in(actual, expected, message=''): assert expected in actual, message ``` 以上代码封装了两个常用的断言方法,第一个是判断两个值是否相等,第二个是判断一个字符串是否包含另一个字符。在测试代码中可以直接调用这些方法。 最后,我们可以将预期结果、实际结果和断言方法整合在一起进行测试。例如: ``` def test_user_login(): url = 'http://api.example.com/login' data = {'username': 'Alice', 'password': '123456'} expected = {'result': 'success', 'token': 'xxxxxx'} response = requests.post(url, data=data) assert response.status_code == 200 actual = response.json() assert actual['result'] == expected['result'] assert actual['token'] == expected['token'] ``` 以上代码测试了一个用户登录的接口,包括了预期结果、实际结果和断言方法。在使用pytest进行测试时,只需要执行pytest命令即可。pytest会自动查找测试文件中以test_开头的测试函数,并执行其中的测试用例。如果测试通过,pytest会输出绿色的结果,否则会输出红色的结果和错误信息。 总之,pytest接口自动化断言封装可以有效提高接口自动化测试的效率和可维护性。在实际项目中,我们应该灵活运用pytest提供的各种功能和插件,来进行高效的接口自动化测试。 ### 回答3: pytest是一个Python编写的功能强大的测试框架,在接口自动化测试中也被广泛使用。它是一款用于优化测试用例编写和断言的测试框架,并且具有丰富的插件库。 在接口自动化测试中,断言是非常重要的,因为通过断言我们可以判断实际结果是否符合预期结果。这是测试用例的最终目的,无论是单元测试还是接口测试都是如此。 为了方便管理和组织测试断言,我们可以使用pytest提供的断言库进行封装。pytest提供了一组丰富的断言方法,覆盖了多种数据类型和实际情况,例如: - assert xx == yy # 判断相等 - assert xx != yy # 判断不等 - assert xx in yy # 判断是否在集合中 - assert xx not in yy # 判断是否不在集合中 - assert xx is yy # 判断是否为同一对象 - assert xx is not yy # 判断是否不为同一对象 如果我们需要使用自定义的断言器,也可以方便地进行封装。例如,我们可以自定义一个检查JSON返回值的断言器: ``` def assert_response_json(response, expected): actual = response.json() assert actual == expected, f"{actual} != {expected}" ``` 这个断言器接受两个参数:一个是实际响应返回值,一个是预期的JSON数据。它会将实际返回值解析为JSON格式,并与预期值进行比较。如果比较结果不符合期望,它会输出错误信息提示哪些值不相等。 然后我们可以在测试用例中使用这个自定义断言器进行断言: ``` import requests def test_login(): url = "http://localhost:8080/login" data = {"username": "testuser", "password": "testpass"} expected = {"code": 0, "message": "登录成功"} response = requests.post(url, data=data) assert_response_json(response, expected) ``` 通过自定义断言器,我们可以方便地封装多个断言方法,提高代码复用性和可维护性,并且可以通过断言输出提示信息,便于问题排查。pytest断言机制给测试框架提供了非常方便的扩展性和调试能力,让接口自动化测试变得更加高效和可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值