概要
测试框架就是一个集成的体系,包括测试功能的函数库(如导入的包),测试数据源(测试数据),测试对象识别标准(webdriver的各个api),以及可充用的模块(结构优化),自动化测试框架主要经过 模块驱动测试–》数据驱动测试–》对象驱动测试几个过程。
一.模块驱动测试
模块驱动主要发展过程:线性测试(一个用例对应一个脚本,数据和脚本混合)—》模块化与类库(重复的部分写成公共的模块,需要的时候进行调用) 模块化多用于登录和退出模块,或者多处共用的模块 好处:
下面我们进行登录和退出的模块化。
登录输入用户名,密码的操作单独放到一个脚本中 login.py
#coding=utf-8 from selenium import webdriver from selenium.common.exceptions import NoSuchElementException import unittest from time import sleep #登录网址 def login(self): driver=self.driver() dr.maxmize_window() dr.find_element_by_name("username").send_keys("dingxin") dr.find_element_by_name("password").send_keys("admin") dr.find_element_by_id("loginInBtn").click() sleep(3)
登录后进行其他操作放到 test_login.py中得到:
#coding=utf-8 from selenium import webdriver from time import sleep from selenium.common.exceptions import NoSuchElementException import unittest import login #Login类继承TestCase类,告诉unittest,这是一个案例 class Login(unittest.TestCase): #初始化数据 def setUp(self): self.driver=webdriver.Chrome() self.driver.implcitly_wait(30) self.url="http://dhw.lxhbysn.com/pages/E02/login.jsp" self.verificationErrors=[] self.accept_next_alert=True #登录 def test_login(self): driver=self.driver driver.get(self.url) #调用登录模块 login.login(self) sleep(3) lis=driver.find_elements_by_class_name("li") for li in lis: if li.get_attribute("role")=="presentation": print li.text # def tearDown(self): self.driver.quit() self.assertEqual([],self.verificationErrors) if _name_=="_main_": unittest.main() (注意缩进,要不然调试不出来)
二.数据驱动测试(即参数化,输入数据的不同导致结果也不同)
实例1:百度搜索逐个多个字段
创建data.txt
selenium go die WFU appium
创建search.py
#coding=utf-8 from selenium import webdriver from time import sleep import os #打开数据文件并读取 source=open("C://Users//DELL//Desktop//data.txt","r") values=source.readlines() source.close() #登录网址 for search in values: dr=webdriver.Chrome() dr.get("http://www.baidu.com") dr.find_element_by_id("kw").send_keys(search) dr.find_element_by_id("su").click() sleep(3) open是以只读方式打开,readlines()逐行读取文件内容
实例二:表单参数化,多条表单信息
具体实现:
创建xls文件转化为csv格式,
#coding=utf-8 #导入csv包 import csv #csv.reader读取csv文件 w_file='C://Users//DELL//Desktop//info.csv' data=csv.reader(file(w_file,'rb')) #循环输出每一行信息 for user in data: print user[0] print user[1] print user[2] print user[3]
结果如下:user[0]表示第一列的数据
>>> ================================ RESTART ================================ >>> test test@163.com 18 男 test2 test2@163.com 21 女 test3 test3@163.com 11 女
实例四:可以通过xml文件进行参数化,一般来说 csv和xml比较灵活。
三.对象驱动测试(POM)
对象驱动测试其实包括数据和关键字驱动测试,关键字驱动即类似与selenium IDE 的 command,target 和value 组合进行测试。