自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小满测试

不求完美,先开始,再完善它

  • 博客(145)
  • 收藏
  • 关注

原创 Pycharm配置Gitee,自己的练习代码也可以版本管理

在 Pycharm 中配置 Gitee 托管,管理自己练习的代码。顺便掌握 Git 的代码管理...

2023-01-31 11:41:29 3808 3

原创 Prometheus + Grafana 在 CentOS 中搭建可视化性能监控平台

Prometheus + Grafana 在 centos 7下的部署搭建,可一次拷贝命令安装即可。

2022-11-01 09:27:22 991

原创 Pytest 参数化(数据驱动)

参数化,就是把测试过程中的数据提取出来,通过参数传递不同的数据来驱动用例运行。其实也就是数据驱动的概念。在 Unittest 中,我们讲过使用 ddt 库配合 unittest 实现数据驱动。在 Pytest 中并不需要额外的库,通过 pytest.mark.parametrize()即可实现参数化。单个参数在使用pytest.mark.parametrize()传递参数化数据时,测试用例本...

2019-12-24 22:30:18 18496 7

原创 Python 列表推导式

列表推导式,也叫列表生成式,是一种方便生成列表的语句。比如我们要将一个全是整数的列表中每个数取平方后放入新的列表,我们会这么写:li = [3, 6, 9, 11]# 定义一个空列表用来存储结果news = []# 将li中的元素挨个运算再添到结果列表for i in li: news.append(i*i)print(news)当然如果你会运用 map() 函数,...

2019-12-12 19:16:53 1189

原创 Python + Selenium PO 设计模式实践

在 Python 领域(Java 中 Selenium 提供了 page factory)中,由于没有官方或者说非常标准的实践模式,再加之 Python 又是一种支持函数式编程的语言,所以对 PO 的实践有很多实现方式。

2019-12-12 19:15:52 1403 2

原创 Python + Selenium 使用 unittest 编写自动化测试用例

我们使用之前演示过的 showdoc,编写一个登录的用例,并检查自定义项目是否存在。首先,我们把这个过程先罗列出来:打开登录页面选择登录输入用户名输入密码点击登录验证自定义项目是否存在由于这个项目登录后没有任何用户名标识,所以要想判断登录的账号是否正确,可以通过该用户下的项目来判断。import unittestimport timefrom selenium impo...

2019-12-11 22:09:25 1024

原创 Python + Selenium Page Object页面对象设计模式

前面提到过 UI 自动化测试最大的障碍或者成本最大的地方就在于页面的频繁变化。UI 自动化测试过于依赖于界面,界面变化意味着你的代码无法使用,需要更新维护。虽然我们可以通过选择更有效的用例来达到降低维护成本的目的,但是毕竟以涉及到 UI 元素变化,我们的代码就需要改变。目前 UI 自动化测试中最流行和达成共识的做法是是采用 Page Object (简称 PO) 设计模式,使用这种模式可以有效...

2019-12-11 22:09:11 735

原创 Python + Selenium结合 unittest 测试框架

如果你是学习网络爬虫,那么到这里就不用再继续看了。如果你是做自动化测试,那么接下来才是重点。关于 unittest 框架的用法,请参考Python 测试框架。前面我们一直在讲 Selenium 对各种操作的模拟,以及处理各种特殊页面元素和结构。虽然通过 assert 语句增加了一些预期结果与实际结果的判断,但是并未形成真正的自动化测试框架。通过对 unittest 框架的理解,已经了解了 P...

2019-12-11 22:08:54 432

原创 Unittest-测试运行:查看测试结果

前面我们已经使用了两种方式运行:unittest.main()TextTestRunnerunittest.main() 是 unittest 中定义的 main() 方法,会自动查找当前测试文件中的所有测试类中的所有符合规则的测试用例,并自动构建测试套件。最后调用 TextTestRunner 中的 run() 方法运行该套件。方便,但是只针对当前文件。main() 与中是根据ASC...

2019-12-11 22:08:43 3782

原创 Unittest-快速开始:一个简单的案例

首先了解一下如何在 unittest 框架中编写测试用例。为了更好的了解 unittest 本身,我们编写一个非常简单的函数来进行测试。# 被测加法函数,传入待相加的参数,返回相加结果def add(a, b): return a + b这就是单元测试最基本的单元——函数。我们对这个 add() 函数进行测试,编写一些测试用例:测试整数相加是否正确测试字符串相加是否正确...

2019-12-11 22:08:30 285

原创 Unittest-用例执行策略:跳过用例和预期失败

Unittest 支持跳过单个测试用例方法甚至整个测试类,用于控制测试用例的运行。Unittest 还可以将测试标记为“预期失败expected failure”,即本来就应该失败或者随着程序版本的更新已不使用的测试,标记后该用例失败,不会认为是测试结果上的失败,也就是说不会将该用例的失败计入测试结果。跳过测试跳过测试有两种方式可以实现,一种是使用 skip() 装饰器,装饰类或者用例,另一...

2019-12-11 22:08:17 793

原创 Python + Selenium(二十四)使用cookie绕过验证码

使用 cookie 绕过验证码这种方式前提是必须要有长时间保存 cookie 的功能,比如登录时会有勾选项"保存本次登录信息",“下次自动登录”,"记住我"等。当你勾选类似的选项后,登录成功后服务器会要求浏览器将登录信息存储你到 cookie。我们就可以从浏览器 cookie 中获取储存的信息,添加到测试过程中的浏览器中,以达到绕过登录的目的。还是以 showdoc 为例,showdoc 是...

2019-12-11 22:08:04 792

原创 Unittest-discover:快捷的用例加载方式

前面我们了解了测试组织的测试套件,已经批量查找用例并生成套件的加载器。而在 unittest 的加载器中还提供了一个更加编辑的用例加载方法 discover()。discover() 是 TestLoader 中用于指定测试目录,并查找该目录及子目录下所有符合查找规则的所有测试用例并构建测试套件。查找的测试目录子目录中的必须包含 __init__.py (空文件即可),也就是子目录必须是...

2019-12-11 22:07:51 366 1

原创 Python + Selenium(二十五)无头模式 headless

所谓浏览器的无头模式headless,就是浏览器在运行时处于后台操作的模式,不会看到浏览器打开,也就不会干扰你手头的工作。对于自动化测试和网络爬虫都有很大的价值。早期我们使用 phantomJS 浏览器来实现这种模式,随着 Chrome 和 Firefox 都加入了无头模式, Selenium 逐渐停止对 phantomJS 的支持。Chrome 的 headlessChrome 的无头模式...

2019-12-11 22:07:40 3266 1

原创 Unittest-测试套件:用例加载与组织

测试套件TestSuite,用于对测试用例的组织。测试用例组织好以后就可以使用运行器TestRunner运行测试套件中包含的测试用例。为了更方便演示,我们将之前的示例拆分到几个文件中:+ test_demo 测试文件夹 - add.py 待测函数 add() 所在的文件 - test_a.py 测试类 TestAddOne 所在的文件,测试整数与字符串相加...

2019-12-11 22:07:19 317

原创 Pytest 为测试增加标记

Pytest 中有一个很有用的功能,就是为测试用例(测试函数,以后我们都把测试函数直接成为测试用例)添加标记的功能.一个测试用例可以添加多个标记,一个标记可以添加给多个用例,运行时可以通过-m参数快速选择被标记的用例。比如我们经常需要做冒烟测试或 BVT 测试,而在这类测试的时候往往并不会运行所有测试用例。大家也都知道冒烟测试是用来验证主要流程、主要功能的正确性,为了突出快速的特性一般会针对...

2019-12-05 15:55:11 702

原创 Pytest 运行参数

前面已经讲过如何运行测试用例,不管用哪种方式,都可以支持这些运行参数。查找用例--collect-only:展示当前 pytest 能找到的用例,也就是说直接根据当前参数配置,能找到的用例列表。用于检验运行的用例是否符合你的预期。-k:使用表达式来指定希望运行的测试用例。...

2019-12-01 19:38:41 5584

原创 Pytest 运行用例

Pytest 不止可以运行自己的用例,也可以运行 unittest 写的用例。Pytest 有很多运行时参数,用于指定运行的用例、运行结果展示、插件参数等。Pytest 有两种运行方式:命令行通过 Pytest 命令运行pytest 参数 参数值 ...代码中使用 pytest.main([‘参数1=参数值1’, '参数2=参数值2'])你安装 pytest 之后就能直接使...

2019-12-01 12:51:50 1591

原创 Python出错重试:retrying

在编写Python代码进行自动化测试、网络爬虫或者其他与网络相关的动作的时候,由于网络影响会容易失败,而这种失败并不是我们需要去处理的。那么这种时候最好的办法就是失败后重试几次,以避免网络的间断性影响。如果我们正常编写代码的话,可能需要 try…except ,但是这种写法很麻烦,能实现的效果也很单一。这里介绍一个 Python 库retrying,专门用来对抛出异常的函数或者方法进行重试。通...

2019-11-29 13:25:04 3635 2

原创 最简单的GUI编程:PySimpleGUI

本系列文章将以 PySimpleGUI 库来为大家讲解 Python 的 GUI 编程。PySimpleGUI 是适用于人类使用的 Python GUI。它将 tkinter,Qt,Remi,WxPython 等 Python 知名的 GUI 库转换为可移植的、用户更友好的、更 Pythonic 的界面开发库。通过 PySimpleGUI 你可以编写基于 Python 原生的 GUI 库 ...

2019-11-28 15:03:55 2957

原创 Pytest 快速开始

我们先来感受一下 Pytest 的用例,老规矩——待测函数依然是 add():首先你要保证你已下载 pytest:pip install pytest然后再找个文件夹新建一个 test_demo.py 文件最后写下如下内容:test_demo.pyimport pytest# 待测函数def add(a, b): return a + bdef test_str...

2019-11-28 15:03:27 282

原创 Pytest 如何编写用例

Pytest 中不仅支持类写用例,也支持用函数写用例,下面我们来看一下如何编写。在写用例之前,我们先了解一下 Pytest 的查找规则,这样我们才知道什么样的用例才是 Pytest 允许的:Pytest 默认会从配置的目录(pytest 的专用配置文件中进行过配置,后面讲)或者从当前目录(未配置的情况下)开始递归查找。如果使用命令行运行方式,那么会从命令运行的当前文件夹开始查找;如果有...

2019-11-28 15:01:46 2604

原创 Pytest框架综述

我将从如下几部分为大家介绍 Pytest 框架。如何编写 Pytest 测试用例Pytest 运行及命令行介绍测试标记Pytest 测试固件Pytest 常用及趣味插件(包括测试报告、并发运行等)Pytest 如何实现各种自动化测试Pytest 与持续集成及其他工具的结合Pytest 内置固件、插件编写(不一定介绍????)一般按照我的习惯,我不会一开始就拿一个复杂的案例来介绍显得...

2019-11-26 21:05:38 378

原创 PySimpleGUI:快速开始

好,我们的第一个 GUI 程序用大家一般在 Python 学习阶段都用过的一个简单的模拟登录。预设账号和密码输入账号输入密码点击提交判断账号和密码是否匹配,都匹配则返回登录成功,否则登录失败。基本逻辑如下:user = input('请输入账号:')password = input('请输入密码:')if user == 'admin' and password == '12...

2019-11-26 16:11:29 2828 4

原创 更强大的测试框架 Pytest

不少同学做自动化测试时选择的是 Unittest 框架。Unittest 框架是 xunit 系列的测试框架 ,这类型的框架都具有很多共同的特性,都是各种语言自带的,比如 Java -> Junit, C# -> Nunit 等等。它们都是以类作为用例的基本形态,都不支持数据驱动、报告也相对比较单调。但是相对来说,xunit 系列的框架都相对容易入门,并且结合其他的一些辅助工具也能完...

2019-11-25 23:05:13 233

原创 Python + Selenium(二十七)WebDriver 原理

如果要精通一门工具,一定要了解其原理。在早期的 Selenium RC 加载浏览器后,它将JavaScript代码注入浏览器,通过 JavaScript 代码在浏览器中驱动自动化运行。Selenium WebDriver 使用每个浏览器的内置的自动化支持来直接驱动浏览器。这些自动化的支持来源于浏览器厂商,更原生更稳定。这些对浏览器的驱动来源于浏览器厂商遵循 WebDriver 中的 WP(W...

2019-11-20 14:04:26 545 1

原创 Python + Selenium(二十六)模拟手机浏览器

现在的 IT 以移动互联网为主,所以一般网站系统都会支持移动模式。移动设备与 PC 网页浏览区别最大的就是分辨率,大型网站为了体验使用移动设备访问时都会专门提供移动版本。而其他很多站点也是采用响应式设计,也可以支持移动设备以较好的访问。我们也需要测试网页在移动设备上的表现,而直接在手机上调用浏览器实现测试过程麻烦且受环境影响很大。我们可以通过在 PC 上模拟移动设备(主要是分辨率和 User-...

2019-11-20 14:04:13 3572

原创 Unittest-测试固件:初始化与清理

unittest 提供了针对测试方法、测试类、测试模块三种范围的测试固件,每个范围都有初始化和清理两种固件。测试方法setUp() 和 tearDown() 两个方法是针对测试用例方法级别的测试固件。在当前测试类中重写这两个方法,当前测试类中的所有测试方法都会执行这两个测试固件。在每个测试方法运行之前运行 setUp(), 在每个测试方法运行之后运行 tearDown()。注意是每个测试...

2019-11-18 17:48:56 1183

原创 Unittest-断言:判断测试结果

通过上一节,我们了解到如何编写一个测试用例。而测试用例中的核心就是如何判断预期与实际结果,自动化测试不像手工测试。手工测试时,根据手工用例执行并人工去判断结果是否符合预期;自动化测试时,需要用代码自动去判断。而代码中判断预期与实际的方式就是断言。Python 中内置了断言语句 assert。接逻辑判断表达式,通过逻辑表达式返回结果的 True 和 False 来辨别预期与实际是否相符...

2019-11-18 10:05:19 1807 1

原创 Python列表推导式问题result = [lambda x: x + i for i in range(10)]

一个经典的 Python 面试题:result = [lambda x: x + i for i in range(10)] print(result[0](10))问,打印的结果是多少?19不止result[0](10)结果是19,result[1](10),result[2](10)…result[9](10) 全是 19。为什么不是 10,11…19 呢?变量 i 不是从 0 ...

2019-11-17 21:45:30 3133 2

原创 Postman Sandbox:JavaScript沙箱

Postman Sandbox (Postman 沙箱) 是一个 JavaScript 执行环境,在编写请求前的脚本和请求的测试脚本时(Postman 和 Newman 中都可以使用)。我们在 Pre-request Script 和 Tests 栏目中编写的代码都是在此沙箱中执行。本文介绍属于 Sandbox 的大致介绍。在了解这部分内容之前,你需要那么一点点 JavaScript 代码基础...

2019-11-16 12:10:23 710

原创 Python + Selenium(二十三)使用百度文字识别API识别验证码

上一节我们讲到验证码,通过图像识别的方式可以识别简单的验证码,所以识别对我们的意义不是特别大。不过我单独开这一节来讲,也算是扩充一些知识面,同时也可以练习一下关于 requests 的一些用法。对接口测试的理解也有很大的好处。首先我们需要注册百度开发者平台,并且认证。看这里注册好以后,创建应用并勾选文字识别服务(其实都可以勾起来玩一玩),文字识别服务分了几种,有完全免费的“通用文字识别”,每...

2019-11-13 09:13:48 740

原创 Python + Selenium(二十二)验证码

这是一张网易邮箱的验证码图片,验证码经常出现在我们登录的时候,下面是一段截取百度百科对验证码的介绍:验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票...

2019-11-13 09:13:32 420

原创 接口测试教程 - PostMan 团队协作

一般做接口测试肯定不会是单打独斗,毕竟工作量摆在那里。那如何使用 Postman 实现多人协作呢?如果测试同一个系统,用例最好放在一起统一管理,这样才能方便运行用例。Postman 有一套内建的分享机制,团队成员必须要拥有 Postman 的账号才行。创建账号首先团队中的每个人必须要注册一个 Postman 的账号:点击右上角的 Sign In :点击Create Account进入注...

2019-11-11 20:48:11 4428 1

原创 Python 中的匿名函数

匿名也就是没有名字,函数为什么要匿名呢?有没有感觉每次为函数取名都是件很悲剧的事情,想取个像样点的函数名很抠脑壳。如果某个函数我们只需要使用一次的时候,还需要取名是不是就更悲剧了?Python 与 JavaScript 支持函数本身作为另外函数的参数传入。这就导致了 Python 中有很多地方高阶函数在使用时,需要传入一个函数。这种时候,函数只在调用高阶函数的时候使用一次。Python 对...

2019-11-11 00:12:37 154

原创 unit test 框架介绍

Unit test 框架最初的灵感来源于 JUnit,并且与其他语言的主要单元测试框架具有类似的风格。基本思想:支持各种层面的自动化测试;测试用例共享setUp初始化和tearDown清理代码;通过各种方式组织测试和规划测试用例;保持测试代码与测试运行之间的的独立性。为实现其基本思想, unit test 使用面向对象的方式实现如下四大功能:test fixturetest f...

2019-11-10 19:03:25 669

原创 Python 虚拟环境

什么是虚拟环境?虚拟环境主要是为了独立多个 Python 解释器环境出来。这有什么用呢?比如你在网上下了一个 Python 的开源系统,其中用到了 Django 1.11 版本,而你现在系统环境中安装的是 Django 2.2 的版本,那你现在是卸载掉 2.2 的版本重新安装 1.11 的版本?但是又有其他的相同用到了 Django 2.2 的版本,这就尴尬了。那么你可以通过建立虚拟环境,让...

2019-11-10 14:08:41 235

原创 Python + Selenium(二十一)文件上传

对于自动化测试过程中去实现文件上传,我内心是拒绝的。目前网上很多资料谈到文件上传动辄谈 AutoIt,这是一款早期的 Windows 自动化工具,用来模拟 Windows 上的操作。这款工具已经十来年没有更新过了。先不谈使用这些工具实现上传是否靠谱,光说文件的上传过程。文件上传一般由如下过程构成:点击某个按钮,比如上传、浏览等浏览器会调用 Windows 的文件浏览对话框让用户选择文件...

2019-11-10 13:08:53 438

原创 Python接口测试教程- requests 文件上传

前面我们通过 post 请求发送的是文本内容,也就是 ASCII 字符。如果需要发送文件到服务器,比如上传图片、视频等,就需要发送二进制数据。通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:payload = {‘key1’: ‘value1’, ‘key2’: ‘...

2019-11-10 13:08:16 1724

原创 Python + Selenium(二十)等待

为什么需要等待?自动化测试脚本在运行时,由于网络原因、机器卡顿、页面元素呈现等原因,导致定位失败。定位失败导致元素无法操作,获取不到用于断言的内容。最终在检查测试结果时就会出现很多因为这些原因而导致的测试失败,需要花大量精力来排查才能找到真正意义上的问题。所以必须要使用等待。其实 Selenium 是有默认等待的,当你打开页面时默认会等待页面元素加载完毕才进行元素定位。但是页面加载完毕后产生...

2019-11-10 13:07:47 506

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除