这里的示例以网易邮箱为例,可以自己注册一个来练习,要说明的是,直接在网易的首页进行定位是定不了的,网易进行过处理;这里是通过百度搜索在搜索结果中进行的定位。
unittest认识
unittest是python内置的单元测试框架,具备编写用例、组织用例、执行用例、输出报告等自动化框架的条件。
使用unittest前需要了解该框架的五个概念: 即test case,test suite,testLoader,test runner,test fixture。
- test case :一个完整的测试单元,执行该测试单元可以完成对某一个问题的验证,完整体现在:
- 测试前环境准备(setUp),执行测试代码(run),以及测试后环境还原(tearDown);
- test suite :多个测试用例的集合,测试套件或测试计划;
- testLoader :加载TestCase到TestSuite中的,其中loadTestsFrom__()方法用于寻找TestCase,并创建它们的实例,然后添加到TestSuite中,返回TestSuite实例;
- test runner :执行测试用例,并将测试结果保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息;
- test fixture:一个测试用例的初始化准备及环境还原,主要是setUp() 和 setDown()方法;
unitest的工作原理
通过unittest类调用分析,可将框架的工作流程概况如下:
编写TestCase,由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite, 最后将运行的结果保存在TextTestResult中。
#coding:utf8
from selenium import webdriver # webdriver属于selenium的API
import unittest # unittest是python自带的模块
import time
class test_mail_login(unittest.TestCase): # 定义一个类并集成 unittest 基类中的 TestCase 类
def setUp(self): # 每个测试case运行之前运行(前置条件)
self.driver = webdriver.Chrome() # 驱动谷歌浏览器
self.driver.get("https://www.baidu.com") # 获取百度URL
self.driver.set_window_size(800, 1000) # 窗口大小设置
# self.driver.maximize_window() # 窗口最大化
time.sleep(2)
self.driver.find_element_by_id("kw").send_keys("网易") # 百度输入框定位并键入关键字
time.sleep(3)
self.driver.find_element_by_id("su").click() # 点击搜索按钮
self.driver.implicitly_wait(5) # 页面静置5秒,无任何动作
def test_mail_loginsuc(self): # 设计测试用例(case)重点注意,方法名必须以【test_】开头
self.driver.find_element_by_id("op_email3_username").send_keys("testerhunter")
time.sleep(2)
self.driver.find_element_by_class_name("op_email3_password").send_keys("123456hunter")