基于Pytest豆瓣自动化测试【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测试相关详细日志

如果对代码感兴趣的可以关注公众号,私信代码。
其他
黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。
百度百科
在软件测试中, 自动化测试指的是使用独立于待测软件的其他软件来自动执行测试、比较实际结果与预期并生成测试报告这一过程。在测试流程已经确定后,测试自动化可以自动执行的一些重复但必要测试工作。也可以完成手动测试几乎不可能完成的测试。对于持续交付和持续集成的开发方式而言,测试自动化是至关重要的。
维基百科

基于Pytest豆瓣自动化测试【1】的更多相关文章
- 基于Python豆瓣自动化测试【2】
-- Pytest基础使用教程[2] 从测试报告说起 承接上一篇中最后的测试结果图,使用过的pytest-html 插件原生态的报告的话.可能会发现 内容样式都有些不同.其实是做了些扩展相关设置所呈现 ...
- robotium从入门到放弃 三 基于apk的自动化测试
1.apk重签名 在做基于APK的自动化测试的过程中,需要确保的一点是,被测试的APK必须跟测试项目具有相同的签名,那怎么做才能确保两者拥有相同的签名呢?下面将给出具体的实现方法. 首先将被测 ...
- Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)
Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...
- Appium 并发多进程基于 Pytest框架
前言: 之前通过重写unittest的初始化方法加入设备参数进行并发,实现了基于unittest的appium多设备并发,但是考虑到unittest的框架实在过于简陋,也不方便后期的Jenkins的持 ...
- 使用 Selenium 实现基于 Web 的自动化测试
(转自http://www.ibm.com/developerworks/cn/web/1209_caimin_seleniumweb/index.html) Selenium 是一个用于 Web 应 ...
- 基于坐标的自动化测试神器---Total Control快速入门
1.Total Control简单介绍 一款能够在PC上控制手机的软件,同时可以使用PC 触摸屏.鼠标.键盘, 全面操控 Android 手机,只需通过 USB 或 WiFi 连接手机至电脑,即可随时 ...
- 基于MBT的自动化测试工具——GraphWalker介绍和实际使用
GraphWalker是一个开源的基于模型的自动化测试工具,它可以用来通过图形测试模型来自动生成测试用例. 本文主要描述了使用yed画出FSM, EFSM模型图(常见的流程图),然后使用GraphWa ...
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
- FastAPI(43)- 基于 pytest + requests 进行单元测试
FastAPI 的单元测试 对于服务端来说,通常会对功能进行单元测试,也称白盒测试 FastAPI 集成了第三方库,让我们可以快捷的编写单元测试 FastAPI 的单元测试是基于 Pytest + R ...
随机推荐
- C#对象初始化器
1.对象初始化器 Student objStu2 = new Student() { StudentId=, //属性之间使用","分隔 StudentName="小明& ...
- vue项目兼容ie
一.兼容ES6 Vue 的核心框架 vuejs 本身,以及官方核心插件(VueRouter.Vuex等)均可以在 ie9 上正常使用.但ie不兼容es6,所以需要安装插件将“Promise”等高级语法 ...
- c#一些常用知识点
UID自动生成随机数 UID.Text = Guid.NewGuid().ToString(); GridView中常用格式化公式 <asp:BoundField DataField=" ...
- Java的Object.wait(long)在等待时间过去后会继续往后执行吗
Java的Object.wait(long)在等待时间过去后会继续往后执行吗 Object.wait(long)方法相比于wait,多了个等待时长,那么当等待时长过去后,线程会继续往下执行吗? 单个线 ...
- 【Hadoop离线基础总结】Yarn集群的资源调度
Yarn集群的资源调度 介绍 概述 Yarn是 Hadoop 2.x 引入的新的资源管理系统模块,主要用于管理集群当中的资源(主要是服务器的各种硬件资源,比如内存.CPU等),它不光管理硬件资源,还管 ...
- 构建自己的专用OpenCV----记录一次由applyColorMap()引发的探索
在编写实际项目的过程中,我需要实现绿色主题的"伪彩色"变换.在目前提供的模板中,只有summer最为接近,但是它的颜色太浅了,看上去不是很清晰.所以我结合ocean和summer两 ...
- 第一行Kotlin系列(二)Intent隐式显式跳转及向下传值
1.Intent显式跳转页面 val button5 = findViewById<Button>(R.id.mButton5) button5.setOnClickListener { ...
- CodeForces - 1209D Cow and Snacks 并查集
CodeForces - 1209D 题意 现在n种点心,每种点心只有一份,有k位客人,每位客人有两种想要吃的点心,你可以安排他们进场的顺序,每位客人会吃掉所有他想要吃的,并且还没被吃掉的点心.如果客 ...
- nginx脚本自动安装
nginx脚本自动安装 脚本功能: 自动安装nginx 自动判别系统是否安装nginx 自定义安装nginx路径 自定义安装nginx版本. #!/bin/bash #2019年10月30日16:00 ...
- JDBC13 ORM02 Map封装
用Map封装一条信息 conn=Utils.getConn(); ps=conn.prepareStatement("select Empname,birthday,salary from ...