zoukankan      html  css  js  c++  java
  • 自动化测试模型总结

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

    一.模块驱动测试

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

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

    好处:1.提高了开发效率,一处写,多处用   2.方便脚本维护,不必改一处,处处动,类似与环境变量设置的   %home%

    下面我们进行登录和退出的模块化,在这之前先了解一下 python的类和方法

    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 组合进行测试。

  • 相关阅读:
    windows下面Nginx日志切割
    C#通过DocX创建word
    leetcode 189 Rotate Array
    leetcode 172 Factorial Trailing Zeroes
    leetcode 169 Majority Element 冰山查询
    leetcode 165 Compare Version Numbers
    leetcode 160 Intersection of Two Linked Lists
    【windows-》linux】SCP
    【设计】B端和C端区别
    【Flask】部署
  • 原文地址:https://www.cnblogs.com/alwayswyy/p/5045639.html
Copyright © 2011-2022 走看看