基于Python豆瓣自动化测试【1】

—— Pytest基础使用教程【1】

引言

Pytest 是一个非常实用的自动化测试框架,目前来说资料也是非常多了。最近某友人在学习 Python的一些测试技术,帮其网上搜了下教程;发现大多数文章多是在介绍入门 又或者 多是聚焦在 Pytest 的一些语法 和 提供的功能上。对于如何实际功能中使用方面教程介绍不多。介于此,写这篇教程选豆瓣网来作为 黑盒评测 对象为例。

功能服务分析

一个社区网站登陆往往是比较常用功能之一,因此选取登陆作为本次自动化测试教程场景。由于本人非豆瓣研发,对其功能服务实现不了解,首先简单分析下豆瓣登陆相关流程,不用特别专业的工具 普通的 Chrome浏览器 就行。

先打开一个隐身标签浏览器,访问豆瓣用户登陆页面。除开一些资源文件,最关键处第一次访问后会在 Cookie 里面写入一个 bid 的变量,推测这个变量应该是用来辨识访问用户的唯一性,主流网站的常见设计之一。

接下来,输入一个错误的账号/密码(jack/123456) 看下登陆交互的服务链路以及相关接口。

. 输入账号触发 stat.html(login_start) 请求;
. 点击按钮发起 stat.html(login_click) 请求;
. 同时发起 login/basic 登陆验证 请求;
. 再次进行 stat.html(login_error) 请求;

整体推测 stat 应该 通过 bid 用来记录唯一用户行为的状态服务,同时也为账号安全场景辨识(比如:无用户行为连续发起 login/basic 验证请求可能是恶意程序访问等)提供基本的行为数据。最后整体梳理下功能服务。

测试服务用例设计

通过以上的功能服务分析,登陆链路中核心的服务为 login/basic 。可以通过一些测试方法论,对其设计出很多的 Case 来。本篇就以 3个 Case 作为用例进行自动化测试实践:

1、访问 login/basic 没有bid相关参数时,服务返回 parameter_missing 缺少参数的信息;
2、访问 login/basic 用户/密码不匹配正确时,返回 unmatch_name_pas_word 用户密码不匹配的信息;
3、访问 login/basic 用户/密码正确时,完成豆瓣用户登陆,返回个人相关信息;

还可以考虑更多的 Case 比如考虑到安全,如果连续不断请求 login/basic 时,应该进行验证码验证,还可以结合用户行为测试等等,在此就不展开了。

基于Pytest实现

首先建立 test-01.py,来作为脚本文件。对于测试一个 HTTP服务 来说,一般都需要模拟一些头部信息。这里简单设置下,来源于Mac OS X 、AppleWebKit等,唯一用户标识生成可能会用到。

定义一个函数来模拟刚刚分析过程中访问豆瓣用户中页面的场景。同时,把Cookie 打印出来用于检查 bid 参数。

类似的,定义一个函数来模拟访问测试的服务 login/basic,考虑到其需要 Cookie 里的相关参数,为此单独 拎出 来作为参数。

从功能服务分析来看,stat 的访问比较多,为了方便 写测试用例复用代码,用一个 class 对象来进行统一管理。通过定义对象相关方法,来模拟相关 stat服务请求,详细可以看具体代码。

测试登陆过程中,账号往往是很多测试用例会使用到的,因此使 @pytest.fixture()机制来进行复用

最后是测试 Case 的实现了,这里往往会是最简单的。主要对 Http服务状态进行assert 判断 和 先前列出的 3个 Case 中业务返回 message 进行检验。详细的见代码逻辑以及注解。

最终测试报告

最后将写好的自动化测试脚本 使用pytest 运行,借助 pytest-html 插件自动生成测试报告:

具体相关case测试相关详细日志

如果对代码感兴趣的可以关注公众号,私信代码。

其他

黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。
百度百科

在软件测试中, 自动化测试指的是使用独立于待测软件的其他软件来自动执行测试、比较实际结果与预期并生成测试报告这一过程。在测试流程已经确定后,测试自动化可以自动执行的一些重复但必要测试工作。也可以完成手动测试几乎不可能完成的测试。对于持续交付和持续集成的开发方式而言,测试自动化是至关重要的。
维基百科

https://mp.weixin.qq.com/s/7kDu5yQz36mvG95azk5AKw

posted @ 2020-05-27 10:29  Java研究者  阅读(825)  评论(0编辑  收藏  举报