07 2021 档案
摘要:环境前提 Python3.6+ 安装插件 pip3 install pytest-html -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 快速入门 命令行执行: pytest --html=report.html 会
阅读全文
摘要:前言 为了提高复用性,我们在写测试用例的时候,会用到不同的fixture,比如:最常见的登录操作,大部分的用例的前置条件都是登录 假设不同的用例想登录不同的测试账号,那么登录fixture就不能把账号写死,需要通过传参的方式来完成登录操作 案例一:传单个参数-函数传参 import pytestde
阅读全文
摘要:前言 pytest 可以支持自定义标记,自定义标记可以把一个 web 项目划分多个模块,然后指定模块名称执行 譬如我可以标明哪些用例是window下执行的,哪些用例是mac下执行的,在运行代码时候指定mark即可 上代码 import pytest @pytest.mark.weibo def te
阅读全文
摘要:前言 pytest.mark.skip 可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能 希望满足某些条件才执行某些测试用例,否则pytest会跳过运行该测试用例 实际常见场景:跳过非Windows平台上的仅Windows测试,或者跳过依赖于当前不可用的外部资源(例如数据库)的测试
阅读全文
摘要:什么是conftest.py 可以理解成一个专门存放fixture的配置文件 实际开发场景 多个测试用例文件(test_*.py)的所有用例都需要用登录功能来作为前置操作,那就不能把登录功能写到某个用例文件中去了 如何解决上述场景问题? conftest.py的出现,就是为了解决上述问题,单独管理一
阅读全文
摘要:用例执行状态 用例执行完成后,每条用例都有自己的状态,常见的状态有 passed:测试通过 failed:断言失败 error:用例本身写的质量不行,本身代码报错(譬如:fixture不存在,fixture里面有报错) xfail:预期失败,加了 @pytest.mark.xfail() error
阅读全文
摘要:前言 前面一篇讲了setup、teardown可以实现在执行用例前或结束后加入一些操作,但这种都是针对整个脚本全局生效的 如果有以下场景:用例 1 需要先登录,用例 2 不需要登录,用例 3 需要先登录。很显然无法用 setup 和 teardown 来实现了 fixture可以让我们自定义测试用例
阅读全文
摘要:前言 用过unittest的童鞋都知道,有两个前置方法,两个后置方法;分别是 setup() setupClass() teardown() teardownClass() Pytest也贴心的提供了类似setup、teardown的方法,并且还超过四个,一共有十种 模块级别:setup_modul
阅读全文
摘要:什么是断言呢?简单来说就是实际结果和期望结果去对比。 一 断言用法 在pytest中,使用assert进行断言,格式为:assert 表达式。 如果表达式返回结果为True,则断言成功,否则断言失败。 二 常用断言 unittest的三种断言: assertIn(expect,result)断言包含
阅读全文
摘要:在Jmeter的后置处理器中添加响应断言, 要测试的响应字段中有两个很难区分的选项, 响应文本和响应信息. 我做了两个小实验来进行区别. 1. 用Fiddler捕捉了一个POST请求, 其响应是successfull. 2. 用Badboy录制脚本以后, 用Jmeter打开, 在该POST请求之后添
阅读全文
摘要:主要介绍select方法的使用具体代码如下# conding = utf-8from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsimport timefrom se
阅读全文
摘要:即使数据库中的数据可能是唯一的,任何特定查询的结果也可能不是——以我们的电影表为例,许多不同的电影可以在同一年上映。在这种情况下,SQL 提供了一种便捷的方法来使用DISTINCT 关键字丢弃具有重复列值的行。 选择具有唯一结果的查询 SELECT DISTINCT column, another_
阅读全文
摘要:在编写WHERE包含文本数据的列的子句时,SQL 支持许多有用的运算符来执行不区分大小写的字符串比较和通配符模式匹配等操作。我们在下面展示了一些常见的文本数据特定运算符: = 区分大小写的精确字符串比较(注意单个等于) col_name = "abc" != or <> 区分大小写的精确字符串不等式
阅读全文
摘要:现在我们知道如何从表中选择特定的数据列,但是如果您有一个包含一亿行数据的表,读取所有行将是低效的,甚至是不可能的。 为了过滤掉某些返回的结果,我们需要WHERE在查询中使用一个子句。该子句通过检查特定的列值来确定它是否应包含在结果中,从而应用于每一行数据。 除了使结果更易于理解之外,编写子句来约束返
阅读全文
摘要:动态手机号处理 动态手机号处理思路 ①编写函数,生成随机的手机号; ②将生成的手机号进行数据库查询; ③如手机号已存在,就重新生成手机号; ④如手机号不存在,就将此手机号替换测试用例中的手机号。 动态手机号处理 1 注册接口测试用例 在data/cases.xlsx中,新建register工作簿,填
阅读全文
摘要:一 场景说明 在面试接口自动化时,经常会问,其他接口调用的前提条件是当前用户必须是登录状态,如何处理接口依赖? 在此之前我们介绍过session管理器保存会话状态。如果接口请求需要携带token,那么又如果处理呢?以下详细介绍。 未登录状态下,直接请求充值接口的异常场景: import unitte
阅读全文
摘要:一 日志介绍 01 为什么需要日志? 代码需要经历开发、调试、审查、测试或者上线等不同阶段,在开发时想要打印的信息类型可能和上线后想看到的信息类型完全不同。也就是说,在“测试”时,可能只想看警告和错误信息,然而在“调试”时,可能还想看到跟调试相关的信息。 如果你想打印出使用的模块以及代码运行的时间,
阅读全文
摘要:在上一篇Python接口自动化测试系列文章:Python接口自动化之yaml配置文件,主要介绍主要介绍yaml语法、yaml存储数据,封装类读写yaml配置文件。 在自动化过程中,我们需要查询数据库,校验结果是否正确,比如充值完成之后,需要查询数据库,查看充值是否成功。 以下主要介绍,pymysql
阅读全文
摘要:在自动化过程中,需要使用配置文件储存数据,比如数据库信息、账号信息、域名等。 其中,yaml文件是一种配置文件类型,相比较ini,conf配置文件来说,更加的简洁,操作也更加简单,同时可以存放不同类型的数据。 以下主要介绍yaml语法、yaml存储数据,封装类读写yaml配置文件。 一 yaml介绍
阅读全文
摘要:接口测试用例实战 以下,我们以登录接口进行实战。 封装的requests请求类,每个用例都要调用,可以放在公共模块里。 ① 在项目下新建一个文件夹common,放入请求模块requests_handler.py requests_handler.py import jsonfrom common.r
阅读全文
摘要:ddt介绍及使用 ddt介绍 名称:Data-Driven Tests,数据驱动测试 作用:由外部数据集合来驱动测试用例的执行 核心的思想:数据和测试代码分离 应用场景:一组外部数据来执行相同的操作 优点:当测试数据发生大量变化的情况下,测试代码可以保持不变 实际项目:excel存储测试数据,ddt
阅读全文
摘要:Excel用例管理 在项目下,新建一个文件夹:data,文件夹下新建一个cases.xlsx文件,用来存放测试用例。 以下,是一个简单的登录测试用例设计模板 可以根据该表格生成实际结果,并将测试结果写入(Pass、Fail)表格。既然有了用例模板,我们就开始从用openpyxl模块对excel读写数
阅读全文
摘要:参数描述 file:文件 verbosity:详细程度 title:标题 description:描述 tester:作者 import unittestimport HTMLTestRunnerfrom unittest1.test_D import *from unittest1.test_E
阅读全文
摘要:如何在报告上面添加测试人员字段: 在代码184行加入:DEFAULT_TESTER = '' 在HTMLTestRunner加上tester变量 在方法getreportattributes中添加返回值tester 在_generate_heading方法中添加tester 然后再次运行用例,并生产
阅读全文
摘要:format用法 相对基本格式化输出采用‘%’的方法,format()功能更强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号‘{}’作为特殊字符代替‘%’ 使用方法由两种:b.format(a)和format(a,b)。 1、基本用法 (1)不带编号,即“{}” (2)带数
阅读全文
摘要:情况一:子类需要自动调用父类的方法:子类不重写__init__()方法,实例化子类后,会自动调用父类的__init__()的方法。 情况二:子类不需要自动调用父类的方法:子类重写__init__()方法,实例化子类后,将不会自动调用父类的__init__()的方法。 情况三:子类重写__init__
阅读全文
摘要:1.eval():把字符串数据类型转换成原本数据类型 例如:数据从excel中拿出来是:数值的格式不变,其他的格式都转成了字符串。要保持原有数据格式不变,需要用到eval() S = 'True'print(eval(S),type(eval(S))) #bool s1 = '18'print(ev
阅读全文
摘要:装饰器引入 初期及问题诞生 假如现在在一个公司,有A B C三个业务部门,还有S一个基础服务部门,目前呢,S部门提供了两个函数,供其他部门调用,函数如下: def f1(): print('f1 called') def f2(): print('f2 called') 在初期,其他部门这样调用是没
阅读全文
摘要:1、字符串前加 u 例:u"我是含有中文字符组成的字符串。" 作用: 后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。 2、字符串前加 r 例:r"\n\n\n\n” # 表示一个普通生字符串 \n\n\n\n,而不表示换行了。
阅读全文
摘要:yield再理解--绝对够透彻 首先,拿好宝剑: 先把yield看做“return”, 普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了。 看做return之后再把它看做一个是生成器(generator)的一部分(带yield的函数才是真正的迭代器), 返回的不是一
阅读全文
摘要:1. 生成器定义 在Python中,一边循环一边计算的机制,称为生成器:generator。 2. 为什么要有生成器 列表所有数据都在内存中,如果有海量数据的话将会非常耗内存。 如:仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。 如果列表元素按照某种算法推算出来,那我们就可以在
阅读全文
摘要:迭代器、迭代的工具 什么是迭代:指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果是下一次重复的初始值 while True: print('hello world') 上面这种方式只有重复,结果并不是下一次的初始,所以不是迭代 例:不用for循环,用while循环将下边几种数据类型
阅读全文
摘要:Python中的seek函数 seek函数通常与readline函数结合在一起 readline只能读取文件一行 与seek函数结合在一起就可以实现读取整个文件的内容 f = open("A.txt", "rb")//使用seek函数读取文件必须使用b模式选项打开文件f.seek(0)print('
阅读全文
摘要:问题引出 在业务处理时经常需要在数据的读取和存入前对数据进行预处理,通过@property和@*.setter两个装饰器就可以方便的实现。 @property python中的@property装饰器可以总结为两个作用: 让函数可以像普通变量一样使用 对要读取的数据进行预处理 from mianxi
阅读全文
摘要:特性property 1:什么是特性property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值。 import mathclass Circle: def __init__(self,radius): #圆的半径radius self.radius=radius @
阅读全文
摘要:1、为什么要使用property这个单词 我们首先来分析一下为什么但是python会用property这个单词,而不用foo,bar这样的单词呢,想必一定有他的想法。通过谷歌翻译查到,property的意思是属性。 property ——> 属性 虽然我们不能猜测出(当然我不提倡乱猜)它的具体意思,
阅读全文

浙公网安备 33010602011771号