一.unittest重要概念 4个重要概念:test fixture.test case.test suite和test runner. 1.Test Case一个TestCase的实例就是一个测试用例.就是一个完整的测试流程,包括测试前准备环境的搭建(setUp).实现测试过程的代码(run),以及测试后环境的还原(tearDown). 2.Test Suite一个功能的验证往往需要多个测试用例,可以把多个测试用例集合在一起来执行,这就产生了测试套件TestSuite的概念.TestSuite…
Selenium 2自动化测试实战 百度网盘 链接:https://pan.baidu.com/s/1aiP3d8Y1QlcHD3fAlEj4sg 提取码:jp8e 复制这段内容后打开百度网盘手机App,操作更方便哦 内容简介  · · · · · · <Selenium 2自动化测试实战——基于Python语言>共分 14 章.第 1 章是自动化测试相关基础知识的介绍:第 2 章到第 10 章是<Selenium 2自动化测试实战——基于Python语言>的重点,循 序渐进地介绍…
一.函数.类和方法1.函数在python中通过def关键字来定义函数 创建一个add()函数,此函数接收两个参数a,b,通过print()打印a+b的结果.调用add()函数,并且上传两个参数3,5给add()函数 通过add()函数不会直接打印结果,而是将处理结果通过return关键字返回,如下图所示 有时我们在调用add()函数的时候不想传参,这时可以为add()函数设置默认参数,如下图所示 如果调用时不传参,那么add()函数就使用默认参数进行计算,如果传参则计算参数的值 2.类和方法2.…
虫师的<Selenium 2自动化测试实战 基于Python语言>是我自动化测试的启蒙书 也是我推荐的自动化测试入门必备书,但是书中有一处明显的错误,会误导很多读者,这处错误就是第8章自动化测试高级应用中,第一节自动发送邮件功能中,8.1.4整合自动发送邮件功能 当我们运行如下代码后,会发现邮件发送成功,但是打开邮件发现邮件中的内容为空 在书中182页我们看到了如下解释. 但是这个解释为错误的,引起无法发送最新报告的内容,其实是因为代码中有一处bug,并非HTMLTestRunner报告文件的…
带unittest的脚本分析 #test.py #coding:utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select from selenium.common.exceptions import N…
unittest补充 1.用例执行的顺序 #test.py #coding:utf-8 from Demo1 import Count import unittest class TestBdd(unittest.TestCase): def setUp(self): print "test TestBdd:" def test_ccc(self): print "test ccc" def test_aaa(self): print "test aaa&…
一.unittest单元测试框架 1.认识单元测试 1.断言方法 #计算器类 #coding:utf-8 #计算器类 class Count: def __init__(self,a,b): self.a=a self.b=b #计算加法 def sum(self): return self.a+self.b 创建一个Count类用于两个整数计算,通过__init__()方法对两个数进行初始化,接着创建sum()方法返回两个数相加的结果 #test.py #coding:utf-8 from D…
背景 最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试&自动化测试的理论知识,遂拿过来学习学习.所以本文几乎没有实践内容,大多都是概念和工具的 mark,后续若有实践,我会来补充的. 一.软件测试 分类 1.根据项目流程阶段划分 需求分析 设计 编码 单元测试 集成测试 系统测试 验收测试 2.白盒测试.黑盒测试.灰盒测试 白盒测试的意义:有时候输出是正确的,但内部其实已经错误了,这种情况非常多. 灰盒测试的意义:如果每次都通过白盒测试来操作…
1.Selenium2 的原理 第一篇分享简单介绍了基于Python开发的Selenium2的环境配置,这篇主要讲一下基本用法.首先讲一下Selenium2的基本原理.基本上知道了这个东西是怎么回事,我们就知道怎么去用它做自动化测试. 与Selenium和Selenium RC不同,Selenium2将浏览器原生的API封装成WebDriver API,可以直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的),所以就像真正的用户在操作一样.其实刚…
HTML测试报告 显然,一份漂亮的测试报告展示自动化测试成果只有一个简单的log文件是不够的.HTMLTestRunner是python标准库unittest单元测试框架的一个扩展,它生成易于使用的HTML测试报告.下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html下载HTMLTestRunner.py文件,选中后右键另存为,保存到本地,然后将其放在python安装目录下的Lib目录下.即:Windows保存到…\pytohn27\L…
编写Web测试用例 1.介绍了unittest单元测试框架,其主要是来运行Web自动化测试脚本.简单的规划一下测试目录:web_demo1/------test_case/------------test_baidu.py------------test_google.py------report/------------login.txt------runtest.py目录结构如下图所示: 创建web测试用例. #test_baidu.py #coding:utf-8 from seleniu…
Page Object设计模式 Page object是selenium自动化测试项目开发时间的最佳设计模式之一,主要体现在对界面交互细节的封装. 1.认识page object优点如下:1.减少代码的重复2.提高测试用例的可读性3.提高测试用例的可维护性,特别是针对UI频繁变化的项目. 2.page object实例下面以登录新浪邮箱为例,通过page object设计模式来实现. #po_model.py #coding:utf-8 from selenium import webdrive…
整合自动发邮件功能 解决了前面的问题后,现在就可以将自动发邮件功能集成到自动化测试项目中了.下面重新编辑runtest.py文件 #runtest.py #coding:utf-8 from HTMLTestRunner import HTMLTestRunner from email.mime.text import MIMEText from email.header import Header import smtplib import unittest,time,os #========…
一.自动化测试模型 自动化测试模型介绍:线性测试.模块化驱动测试.数据驱动测试和关键字驱动测试 线性测试:每个测试脚本相对独立,且不产生其他依赖与调用,只是单纯的来模拟用户完整的操作场景.模块化驱动测试:把重复的操作独立成公共模块,当用例执行过程中需要用到这一模块操作时则被调用.数据驱动测试:就是数据的参数化,因为输入数据的不同从而引起输出结果的不同.不管我们读取的是定义的数组.字典,或者是外部文件(excel.csv.txt.xml等)都可以看做是数据驱动,它的目的就是实现数据与脚本的分离.…
一.上传文件 上传文件是比较常见的web功能之一,但WebDriver没有提供专门用于上传的方法. 一般web页面的上传功能的操作需要单击“上传”按钮后打开本地的Window窗口,从窗口选择本地文件进行上传.而WebDriver是无法操作Windows控件的,所以,对于web页面的上传功能实现一般由以下两种方式.(1)普通上传:普通的附件上传是将本地文件的路径作为一个值放在input标签中,通过form表单将这个值提交给服务器.(2)插件上传:一般是指基于Flash.JavaScript或Aja…
多线程技术 python通过两个标准库thread和threading提供对线程的支持.thread提供了低级别的,原始的线程以及一个简单的锁.threading基于Java的线程模型设计. 1.threading模块应该避免使用thread模块,原因是它不支持守护线程.当主线程退出时,所有的子线程不管他们是否还在工作,都会被强行退出.有时候并不希望出现此种行为,因此就引入了守护线程的概念.threading模块支持守护线程,所以,我们直接使用threading来改进上述的例子. #thread…
一.更易读的测试报告 1.知识点:python的注释. 1.一种叫comment,为普通的注释2.另一种叫doc string,用于函数,类和方法的描述.在类或方法的下方,通过三引号(""" """或''' ''')来添加doc string类型的注释,这类注释在平时调用的时候不显示,可以通过help()方法来查看类或方法的这种注释. HTMLTestRunner可以读取doc string类型的注释,所以,我们只需要给测试类或方法添加这种类型的…
Fixtures fixtures可以形象地把它看作是夹心饼干外层的两片饼干,这两片饼干就是setUp/tearDown,中间的心就是测试用例.除此之外,unittest还提供了更大范围的fixtures,例如对于测试类和模块的fixtures. #test.py #coding:utf-8 import unittest def setUpModule(): print ("test module start >>>>>>>>>>&q…
跳过预期和预期失败 在运行测试时,有时需要直接跳过某些测试用例,或者当用例符合某个条件时跳过测试,又或者直接将测试用例设置为失败.unittest提供了实现这些需求的装饰器. --unittest.skip(reason) 无条件地跳过装饰的测试,说明跳过的原因. --unittest.skipIf(condition,reason) 如果条件为真时,跳过装饰的测试. --unittest.skipUnless(condition,reason) 除非条件为真,跳过装饰的测试. --unitte…
一.组织单元测试用例 看看unittest单元测试框架是如何扩展和组织新增的测试用例以之前的calculator.py文件为例,为其扩展sub()方法,用来计算两个数相减的结果. #coding:utf-8 #计算器类 class Count(): def __init__(self,a,b): self.a=int(a) self.b=int(b) #计算加法 def sum(self): return self.a+self.b #计算减法 def sub(self): return sel…
一.断言方法 执行用例的过程中,最终用例是否执行通过,是通过判断测试得到的实例结果与预期结果是否相等决定的.unittest框架的TestCase类提供下面这些方法用于测试结果的判断. -assertEqual(first,second,msg=None) 断言第一个参数和第二个参数是否相等,如果不相等则测试失败.msg为可选参数,用于定义测试失败时打印的信息. #test.py #coding:utf-8 from Demo1 import Count import unittest #测试两…
一.webdriver原理 webdriver是按照Server-Client的经典设计模式设计的.Server端就是Remote Server,可以是任意的浏览器.当我们的脚本启动浏览器后,该浏览器就是Remote Server,它的职责就是等待Client发送请求并作出响应.Client简单来说就是我们的测试代码,我们测试代码中的一些行为,例如打开浏览器,转跳到特定的URL等操作是以http请求的方式发送给被测试浏览器的,也就是Remote Server.Remote Server接受请求,…
一.窗口截图 WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口. # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep from selenium.webdriver.common.keys import Keys driver=webdriver.Chrome() driver.get("http://www.baidu.com") dr…
一.处理HTML5的视频播放 大多数浏览器使用控件(如Flash)来播放视频,但是,不同的浏览器需要使用不同的插件.HTML5定义了一个新的元素<video>,指定了一个标准的方式来嵌入电影片段. #test_video.py # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep driver=webdriver.Chrome() driver.get("https://videoj…
 一.调用JavaScript(控制浏览器的滚动条) WebDriver提供了execute_script()方法来执行JavaScript代码.用于调整浏览器滚动条位置的JavaScript代码如下: # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep from selenium.webdriver.common.keys import Keys #访问百度 driver=webdriver…
一.操作cookie 有时候我们需要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试的.WebDriver提供了操作Cookie的相关方法,可以读取.添加和删除cookie信息.WebDriver操作cookie的方法:get_cookies(): 获得所有cookie信息get_cookie(name):返回字典的key为“name”的cookie信息add_cookie(cookie_dict):添加cookie,“cookie_dict”指字典对象,…
一.下载文件 webDriver允许设置默认的文件下载路径,也就是说,文件会自动下载并且存放到设置的目录中.下面以火狐浏览器为例,执行文件的下载. #downfile.py # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep profile = webdriver.FirefoxProfile() profile.set_preference('browser.download.dir', '…
一.警告框处理 在WebDriver中处理JavaScript所生成的alert.confirm以及prompt十分简单,只需要使用switch_to_alert()方法定位到alert/confirm/prompt,然后使用text/accept/dismiss/send_keys等方法进行操作.(1)text:返回alert/confirm/prompt中的文字信息(2)accept():接受现有警告框(3)dismiss():解散现有警告框(4)send_keys(KeysToSend):…
一.多窗口切换 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作.WebDriver提供了switch_to.window()方法.可以实现在不同的窗口之间切换.以百度和百度注册页为例,在两个窗口之间切换 #coding:utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver=webdriver.Chr…
一.多表单切换 在web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位.这时就需要通过switch_to_frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中. #frame.html <html> <head> <link href="http://cdn.bootcss.com/bootstrap/3.3.0/…