—— 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】的更多相关文章

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

    -- Pytest基础使用教程[2] 从测试报告说起 承接上一篇中最后的测试结果图,使用过的pytest-html 插件原生态的报告的话.可能会发现 内容样式都有些不同.其实是做了些扩展相关设置所呈现 ...

  2. robotium从入门到放弃 三 基于apk的自动化测试

      1.apk重签名   在做基于APK的自动化测试的过程中,需要确保的一点是,被测试的APK必须跟测试项目具有相同的签名,那怎么做才能确保两者拥有相同的签名呢?下面将给出具体的实现方法. 首先将被测 ...

  3. Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)

    Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...

  4. Appium 并发多进程基于 Pytest框架

    前言: 之前通过重写unittest的初始化方法加入设备参数进行并发,实现了基于unittest的appium多设备并发,但是考虑到unittest的框架实在过于简陋,也不方便后期的Jenkins的持 ...

  5. 使用 Selenium 实现基于 Web 的自动化测试

    (转自http://www.ibm.com/developerworks/cn/web/1209_caimin_seleniumweb/index.html) Selenium 是一个用于 Web 应 ...

  6. 基于坐标的自动化测试神器---Total Control快速入门

    1.Total Control简单介绍 一款能够在PC上控制手机的软件,同时可以使用PC 触摸屏.鼠标.键盘, 全面操控 Android 手机,只需通过 USB 或 WiFi 连接手机至电脑,即可随时 ...

  7. 基于MBT的自动化测试工具——GraphWalker介绍和实际使用

    GraphWalker是一个开源的基于模型的自动化测试工具,它可以用来通过图形测试模型来自动生成测试用例. 本文主要描述了使用yed画出FSM, EFSM模型图(常见的流程图),然后使用GraphWa ...

  8. 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码

    引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...

  9. FastAPI(43)- 基于 pytest + requests 进行单元测试

    FastAPI 的单元测试 对于服务端来说,通常会对功能进行单元测试,也称白盒测试 FastAPI 集成了第三方库,让我们可以快捷的编写单元测试 FastAPI 的单元测试是基于 Pytest + R ...

随机推荐

  1. bootstrap-内联文本元素-小号文本

    说明 使用 <small> 标签包裹,其内的文本将被设置为父容器字体大小的 85% 示例 <!DOCTYPE html> <html lang="zh-CN&q ...

  2. DFS--POJ 1190 生日蛋糕

    Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri ...

  3. muduo网络库源码学习————Exception类

    Exception类是为异常捕获而设计,可以获得异常的信息以及栈的回溯信息 (原来的代码没有demangle成员函数,输出的格式比较难看,加了demangle成员函数,利用demangle成员函数可以 ...

  4. pyhton中绘制多个图像

    1,在python的图像学习中,有时我们需要在同一个窗口中,显示多个图像,方便我们查看输出图像的区别. 2,在pycharm中,导入matplotlibmokuai,据说此模块来自matlab,因为没 ...

  5. U盘安装Proxmox VE(二)

    转自我的个人博客<U盘安装Proxmox VE(二)> 上一篇<U盘安装Proxmox VE(一)>制作好启动盘后,插入U盘,设置bios从U盘启动,开始安装pve. 一.安装 ...

  6. 算法---BitMap

    问题: 假设有3亿个整数(范围0-2亿),如何判断某一个树是否存在.局限条件一台机器,内存500m. 常规的思路:我们可以将数据存到一个集合中,然后判断某个数是否存在:或者用一个等长的数组来表示,每个 ...

  7. win7 64位系统使用vs2010编译OSG3.2.1

    首先我想说的是,osg是有二进制安装包的:http://openscenegraph.alphapixel.com/osg/downloads/free-openscenegraph-binary-d ...

  8. python数据统计分析

    1. 常用函数库   scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了.这个模块被重写并成为了 ...

  9. Constant Palindrome Sum(贪心*RMQ)

    传送门 怎么说呢,想了几个小时没做出来实在可惜. \(\color{Red}{首先肯定想到暴力嘛!但是x定值有那么多值可以取,怎么办呢?}\) 但是题目中有一个很关键的条件 \[a[i]>=1\ ...

  10. 【Spark】Spark必不可少的多种集群环境搭建方法

    目录 Local模式运行环境搭建 小知识 搭建步骤 一.上传压缩包并解压 二.修改Spark配置文件 三.启动验证进入Spark-shell 四.运行Spark自带的测试jar包 standAlone ...