基于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 ...
随机推荐
- python(面向对象-类封装调用)
一.面对对象思想 (1)大家肯定听过 Python 中”一切皆对象“的说法,但可能并不了解它的具体含义,只是在学习的时候听说 Python 是面向对象的编程语言,本节将向大家详细介绍 Python 面 ...
- jQuery如何使用键盘事件,按住空格键完成进度条效果,并终止键盘事件
jQuery使用键盘事件 keyup:键盘抬起时 keydown:键盘按下时 keypress:键盘按住时 运行下列代码,可以看效果 $(document).keyup(function () { c ...
- 【Java8新特性】还没搞懂函数式接口?赶快过来看看吧!
写在前面 Java8中内置了一些在开发中常用的函数式接口,极大的提高了我们的开发效率.那么,问题来了,你知道都有哪些函数式接口吗? 函数式接口总览 这里,我使用表格的形式来简单说明下Java8中提供的 ...
- 郭天祥TX-1C+DS12C887实现电子日历和闹钟
经过几天时间,看着DS12C887的DataSheet把这个带闹钟的电子日历遍了出来. 发现了几个问题,在此记录一下: DS12C887虽然说带闰年.星期等等的自动计算,可是在手工设置时间时,居然可以 ...
- docker-compose安装rabbitmq集群(主从集群---》镜像集群)
docker-compose安装rabbitmq集群(主从集群--->镜像集群) yls 2020/5/11 创建docker-compose.yml 文件 version: '3' servi ...
- 数据结构学习:二叉查找树的概念和C语言实现
什么是二叉查找树? 二叉查找树又叫二叉排序树,缩写为BST,全称Binary Sort Tree或者Binary Search Tree. 以下定义来自百度百科: 二叉排序树或者是一棵空树,或者是具有 ...
- Power BI Desktop心得
我是用钉钉邮箱做账号登录Power BI Desktop的.我用Power BI Desktop,做排版和统计. Power BI由Power Query和Power Pivot组成,前者有M语言,后 ...
- 线程和Python—Python多线程编程
线程和Python 本节主要记录如何在 Python 中使用线程,其中包括全局解释器锁对线程的限制和对应的学习脚本. 全局解释器锁 Python 代码的执行是由 Python 虚拟机(又叫解释器主循环 ...
- JS理论:调用栈、事件循环、消息队列(也叫任务队和回调队列)、作业队列(微任务队列)
一:调用栈是个什么鬼东西,它具有栈的属性--后进先出 先看一段简单的JS代码: const second = function(){ console.log('hello there'); } con ...
- java ->String、StringBuffer、StringBuilder三者之间的区别
1.首先说运行速度,速度由快到慢排列:StringBuilder > StringBuffer > String String最慢的原因: String为字符串常量,而StringBuil ...