自动化测试模型总结

测试框架就是一个集成的体系,包括测试功能的函数库(如导入的包),测试数据源(测试数据),测试对象识别标准(webdriver的各个api),以及可充用的模块(结构优化),自动化测试框架主要通过  模块驱动测试--》数据驱动测试--》对象驱动测试几个过程。python

一.模块驱动测试web

模块驱动主要发展过程:线性测试(一个用例对应一个脚本,数据和脚本混合)---》模块化与类库(重复的部分写成公共的模块,须要的时候进行调用)api

模块化多用于登陆和退出模块,或者多处共用的模块app

好处:1.提升了开发效率,一处写,多处用   2.方便脚本维护,没必要改一处,到处动,相似与环境变量设置的   %home%框架

下面咱们进行登陆和退出的模块化,在这以前先了解一下 python的类和方法jsp

def关键字用来建立函数,add为方法名。a和b为参数;class关键字用来建立类,Counter为方法名,特别注意,类下建立方法第一个参数必须为self,可是使用时没必要赋值模块化

self:self指对象自己,建立类和方法时实例化获得对象 self,调用时自动执行 类.方法(对象self,参数a,参数b)函数

>>> def add(a,b):
	c=a+b
	print c

	
>>> add(2,3)
5
>>> def add1(a=1,b=12):
	c=a+b
	return c

>>> d=add1()
>>> print d
13
>>> class Counter:
	def add(self,a,b):
		c=a+b
		print c
	def subtract(self,a,b):
		c=a-b
		print c
>>> d=Counter()
>>> d.subtract(7,2)
5

登陆输入用户名,密码的操做单独放到一个脚本中  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()逐行读取文件内容

实例2:登陆时多个用户名和密码

python读取文件只有整个读取,逐行,逐个字节进行读取,没有一次读取两条数据

(1)思路:能够建立两个txt,一个放登陆名,一个放密码,缺点是没法实现循环

(2)使用函数

def  fun(name="admin",pass=123"):
   return  name,pass

#正式的登陆页面调用该函数
us,pw=info.fun()  

(3)python字典(键值对)建立字典用{},keys()返回键值列表,values()返回值列表,

>>> data={'user':'dong','apassword':'489330019'}
>>> print data
{'user': 'dong', 'apassword': '489330019'}
>>> data.keys()
['user', 'apassword']
>>> data.values()
['dong', '489330019']
>>> data.items()
[('user', 'dong'), ('apassword', '489330019')]

函数获取data(整个文件)后期能够用如下循环取出:

for user,pass in  info.items():
 # (将user,pass传入到send_keys()中) 

实例三:表单参数化,多条表单信息(姓名,性别,邮箱,号码),保存成excel,转为csv,可用于建立订单或添加联系人

具体实现:

建立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比较灵活。

三.对象驱动测试

对象驱动测试其实包括数据和关键字驱动测试,关键字驱动即相似与selenium IDE 的 command,target 和value 组合进行测试。

相关文章
相关标签/搜索