文本

PythonAPI测试自动化框架使用assertpy添加流畅断言

是如果你喜欢使用 HTTP 采样器,你可以使用。GraphQL 为维护测试计划提供了一种舒适和简单的方法标头图片来源中的徽标:Python,请求,JSON,HTTP 这是有关如何使用python构建API框架的系列文章中的第二篇。 您可以阅读下面的先前部分: Python API测试自动化框架(第1部分)简介,设置和安装 Python API测试自动化框架(第2部分)发出HTTP请求 任何测试自动化框架的组成部分都是如何执行断言。 您也可以说这是测试自动化的基本要素。 有没有看过一个没有断言的测试? 🤔 尽管您始终可以选择语言或测试框架的现成功能,甚至可以自己包装。 最好不要重新发明轮子☸️并利用好的断言库来节省您宝贵的实施时间,这总是一个好主意。 对于python,有许多选项可用。 但是,我特别喜欢assertpy库,因为它具有流利的断言功能,而且它对使用本机python数据结构(例如list,set,dict等其他原始数据类型)具有出色的支持这一事实。 它受到AssertJ库的极大启发,该库本身在Java社区中非常流行,并在许多流行的开源工具中使用. 从流利的断言开始 您可能会问,如何从使用assertpy的流畅断言开始? 像其他任何python模块一样,您应该首先使用以下命令将其添加到虚拟环境中 pipenv安装assertpy 另外,阅读详尽且写得很好的Github自述文件是一个很好的起点,因为它为您提供了assertpy可能实现的大量操作和方法列表。 您可以在assertpy / assertpy上了解更多 基本断言 让我们来看一些有关用例的基本断言,剩下的我将在遇到某些用例时留给您探讨。 通常,浏览库的功能通常是一个好主意,这样您的大脑就可以记住是否已经了解到功能X,而这种行为可以帮助您解决将来的用例 假设您要根据我们一直在关注的同一个人的响应将多个断言链接到一个特定的人:

[
    {
        "fname": "Kent",
        "lname": "Brockman",
        "person_id": 2,
        "timestamp": "2020-12-01T16:50:36.843495"
    },
    {
        "fname": "Bunny",
        "lname": "Easter",
        "person_id": 3,
        "timestamp": "2020-12-01T16:50:36.843706"
	}
	...
]

记住,我们进行了从可用人员中提取名字的检查,然后添加了检查以查看肯特是否包含在其中: first_names = [people['fname'] for people in response_text] assert_that(first_names).contains('Kent') 我们可以使用assertpy提供的功能,根据某个键从dict对象列表中提取列表,然后将多个断言链接在一起。 以上内容可以有效地替换为。 assert_that(response_content).extracting('fname').is_not_empty().contains('Gaurav')

观察到我们能够对同一对象进行多次检查,并且读起来像英语句子一样流利。 🙌🏼 另外,请注意,当断言失败时,我们将收到一条友好的人类可读错误消息,如下所示: AssertionError: Expected <['Kent', 'Bunny', 'Doug']> to contain item , but did not.

将Gaurav替换为Kent以查看断言通过。 您可以使用断言库执行的最常见操作是: is_equal_to, is_empty, contains, does_not_contain, matches

开箱即用的assertpy可以轻松地支持这些功能。 打印自定义断言消息 假设您要在断言失败时打印自己的自定义消息,可以使用description =“''关键字参数轻松地做到这一点 assert_that(response.status_code, description='Person not created').is_equal_to(requests.codes.ok)

例如,我错误地将预期的响应代码从no_content修改为ok,并且assertpy提供了以下可读的堆栈跟踪以及我们提供的错误消息> assert_that(response.status_code, description='Person not created').is_equal_to(requests.codes.ok) E AssertionError: [Person not created] Expected <204> to be equal to <200>, but was not.

people_test.py:63: AssertionError 软断言 您还可以执行软断言(即不要在第一次失败时停止测试),而是在最后引发单个断言错误,为此,请确保使用soft_assertions()函数和使用with子句的python上下文管理器 def test_read_all_has_kent():

We use requests.get() with url to make a get request

response = requests.get(BASE_URI)

response from requests has many useful properties

we can assert on the response status code

with soft_assertions(): assert_that(response.status_code).is_equal_to(requests.codes.no_content) # fails # We can get python dict as response by using .json() method response_content = response.json()

   # Use assertpy's fluent assertions to extract all fnames and then see the result is non empty and has
   # Kent in it.
   assert_that(response_content).extracting('fname').is_not_empty().does_not_contain('Kent') # fails

在上面的示例中,我们故意修改了状态码声明和响应声明。 下面是测试运行后的样子,我们看到两条断言消息都出现了。 结论 我希望您更好地了解专用的流利断言库如何使您的框架变得更好,并且希望您继续使用它们。 就是这个帖子。 在本系列的下一篇文章中,我们将看到如何使用XML和JSON数据类型。 如果您认为这篇文章很有用,请与朋友或同事分享,如果您有想法,我很乐意在Twitter或评论中聊天。 直到下一次。 快乐的测试和编码。

author

石头 磊哥 seven 随便叫

company

thoughtworks(离职了。。。。)

大家好,本人不才,目前依旧混迹于thoughtworks,做着一名看起来像全栈的QA,兴趣爱好前端,目前是thoughtworks 西安QA社区的leader,如果有兴趣分享话题,或者想加入tw,可以找我

roles

QA(营生) dev(front-end dev 兴趣爱好)

联系方式

如果想转载或者高薪挖我 请直接联系我 哈哈

wechat:

qileiwangnan

email:

qileilove@gmail.com