转载

Web自动化测试模型总结

概要

测试框架就是一个集成的体系,包括测试功能的函数库(如导入的包),测试数据源(测试数据),测试对象识别标准(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 组合进行测试。

原文  http://1.chaoxu.sinaapp.com/archives/3869
正文到此结束
Loading...