—— 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. 现代软件工程讲义 如何提出靠谱的项目建议 NABCD

    互联网时代对于创新者来说, 既是一个伟大的时代, 又是一个糟糕的时代. 你有很多机会做出影响世界的产品,  但是, 似乎任何想法都被别人想到过了, 做出来了, 上市了, 移植到各种平台上去了-  那么 ...

  2. .user.ini 无法修改/删除 怎么办?

    首先 了解chattr命令: Linux chattr命令用于改变文件属性. 这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式: a:让文件或目录仅供附加用途.b:不更 ...

  3. JDK 配置环境变量

    1.配置环境变量 右击 我的电脑 --> 属性 --> 高级系统设置 --> 高级 --> 环境变量 在系统变量里新建 JAVA_HOME 变量,变量值如下 D:\work_s ...

  4. 从入门到精通(分布式文件系统架构)-FastDFS,FastDFS-Nginx整合,合并存储,存储缩略图,图片压缩,Java客户端

    导读 互联网环境中的文件如何存储? 不能存本地应用服务器 NFS(采用mount挂载) HDFS(适合大文件) FastDFS(强力推荐

  5. Java——单双引号的区别

    单引号: 单引号包括的是单个字符,表示的是char类型.例如: char  a='1' 双引号: 双引号可以包括0个或者多个字符,表示的是String类型. 例如: String s="ab ...

  6. 你知道Spring是怎么解析配置类的吗?

    彻底读懂Spring(二)你知道Spring是怎么解析配置类的吗? 推荐阅读: Spring官网阅读系列 彻底读懂Spring(一)读源码,我们可以从第一行读起 Spring执行流程图如下: 如果图片 ...

  7. 王颖奇 20171010129《面向对象程序设计(java)》第十七周学习总结

    实验十七  线程同步控制 实验时间 2018-12-10 学习总结: 1.Java通过多线程的并发运行提高系统资源利用 率,改善系统性能. 2.假设有两个或两个以上的线程共享 某个对象,每个线程都调用 ...

  8. Vue + Element-ui实现后台管理系统(3)---面包屑 + Tag标签切换功能

    面包屑 + Tag标签切换功能 有关后台管理系统之前写过两遍博客,看这篇之前最好先看下这两篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-system 1.V ...

  9. Git管理修改、撤销修改、删除文件

    什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改. a.管理修改 对于提交修改, ...

  10. 变分深度嵌入(Variational Deep Embedding, VaDE)

    变分深度嵌入(Variational Deep Embedding, VaDE) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 这篇博文主要是对论文“ ...