• Selenium3+python自动化013-自动化数据驱动及模型介绍


    一、查看当前运行的浏览等相关信息

    1 driver=webdriver.Chrome()
    2 print(driver.capabilities["version"]) #浏览器版本
    3 print(driver.capabilities["platform"]) #浏览器运行平台
    4 print(driver.capabilities["browserName"]) #浏览器名称
    1 75.0.3770.100
    2 Windows NT
    3 chrome

     

    二、自动化测试框架搭建篇:数据驱动测试

    1.数据驱动概述

    相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数据驱动。

    实施数据驱动测试步骤如下:
    (1)编写测试脚本,脚本需要支持从程序对象、文件或数据库读入测试数据
    (2)将测试脚本使用的测试数据存入程序对象、文件或数据库等外部介质中
    (3)运行脚本过程中,循环调用存储在外部介质中的测试数据
    (4)验证所有的测试结果是否符合预期结果

     1 # @Author:lsj
     2 # @version V1.0
     3 # -*- coding:UTF-8 -*-
     4 
     5 import unittest
     6 from selenium import webdriver
     7 from time import sleep
     8 from selenium.webdriver.support.ui import WebDriverWait
     9 from selenium.webdriver.support import expected_conditions as EC
    10 from selenium.webdriver.common.by import By
    11 
    12 # 打开浏览器
    13 def openBroswer():
    14     driver = webdriver.Chrome()
    15     return driver
    16 # 获取URL地址
    17 def openUrl(driver, url):
    18     driver.get(url)
    19     driver.maximize_window()
    20 
    21 # 元素是否存在
    22 def ele_is_presence(driver, tuple_arg):
    23     return WebDriverWait(driver, 10).until(EC.presence_of_element_located(tuple_arg))
    24 
    25 # 点击操作
    26 def ele_click(driver, tuple_arg):
    27     ele_is_presence(driver, tuple_arg).click()
    28 
    29 # 发送文本
    30 def ele_sendKeys(driver, tuple_arg, keyword):
    31     ele_is_presence(driver, tuple_arg).send_keys(keyword)
    32 
    33 # 检查登录结果
    34 def checkResult(driver, loginfo):
    35     try:
    36         ele_is_presence(driver, loginfo)
    37         print("登录状态验证通过!")
    38     except:
    39         print("登录失败!")
    40 # 退出
    41 def quitbrowser(driver):
    42         sleep(2)
    43         driver.quit()
    44 
    45 class Test_Login():
    46     url = 'http://daxue.qysxy.com.cn/admin/static/front/html/login.html'
    47     account = ['fuguang',"admin","fuguangl"]
    48     pwd = ['123456','123456','123456']
    49     c = ['1111', '2222','1111']
    50     username = (By.NAME, "username")  # 用户名输入框
    51     password = (By.NAME, "password")  # 密码输入框
    52     code = (By.ID, "code")  # 验证码输入框
    53     loginbtn = (By.ID, 'loginBtn')  # 登录按钮
    54 
    55 
    56     # 实例化driver
    57     driver = openBroswer()
    58     # 打开url
    59     openUrl(driver, url)
    60     # 首页点击登录按钮
    61     ele_click(driver, loginbtn)
    62 
    63     length = len(account)
    64     # 输入用户名
    65     for i in range(0, length):
    66         #for j in range(0, length):
    67             ele_sendKeys(driver, username, account[i])
    68             # 输入密码
    69             ele_sendKeys(driver, password, pwd[i])
    70             # 输入验证码
    71             ele_sendKeys(driver,code,c[i])
    72             # 点击登录按钮
    73             ele_click(driver, loginbtn)
    74             sleep(3)
    75             driver.refresh()
    76     quitbrowser(driver)
    77 
    78 if __name__ == '__main__':
    79     Test_Login()
    简单的数据驱动设计模式

    对上面的数据整理到一个文件中,如下所示,导入到Excel中

     

    2.数据驱动单元测试的环境准备

    2.1、openpyxl模块的安装:pip install openpyxl,验证方式如下:from openpyxl import load_workbook

    没有报错证明安装成功。

    2.2、注意openpyxl只能操作xlsx文件而不能操作xls文件

    2.3、在openpyxl中,主要用到三个概念:Workbooks,Sheets,Cells 

    (1)Workbook就是一个excel工作表,如下操作

    #打开一个xlsx文件
    wb=load_workbook('test.xlsx')
    

     

    (2)Sheet是工作表中的一张表页,如下有三种方式

    #获取一张表(一)
    # sheet1=wb.get_sheet_by_name('Sheet1')
    #获取一张表(二)
    # sheet1=wb['Sheet1']
    #获取一张表(三)
    sheet1=wb.worksheets[0]
    

     

    (3)Cell就是简单的一个格

    # @Author:lsj
    # @version V1.0
    # -*- coding:UTF-8 -*-

    from openpyxl import load_workbook

    #打开一个xlsx文件
    wb=load_workbook('test_budaoguan.xlsx')

    #获取一张表(一)
    # sheet1=wb.get_sheet_by_name('Sheet1')
    #获取一张表(二)
    # sheet1=wb['Sheet1']
    #获取一张表(三)
    sheet1=wb.worksheets[0]
    # 打印sheet1
    print(sheet1)

    #表格中输入内容,注意:当文件打开时,数据写不进去。
    sheet1['A1']='TEST'
    #保存(修改之后需要保存,否则修改无效)
    wb.save('test_budaoguan.xlsx')

    运行结果如下

     

    #打印表名
    print("表名:",sheet1.title)
    #读取一整行(传入行号)
    print("读取一整行:",sheet1[1])
    #读取某一列
    print("读取某一列:",sheet1['A'])
    #读取某一格的值
    print("读取某一格:",sheet1['A1'])
    print("读取某一格的值:",sheet1['A1'].value)

    #获取最大行数
    print("获取最大行数:",sheet1.max_row)
    #获取最大列数
    print("获取最大列数:",sheet1.max_column)

      运行结果:

    表名: Sheet2
    读取一整行: (<Cell 'Sheet2'.A1>,)
    读取某一列: (<Cell 'Sheet2'.A1>,)
    读取某一格: <Cell 'Sheet2'.A1>
    读取某一格的值: TEST
    获取最大行数: 1
    获取最大列数: 1
    

      

    # 获取所有行
    # print(sheet1.rows)
    # 获取所有的列
    # print(sheet1.columns)
    

      

    3.使用Excel进行数据驱动测试

    测试逻辑:
    1.打开百度首页,从Excel文件中读取数据作为搜索关键词
    2.在搜索输入框中输入读取出的搜索关键词
    3.单击搜索按钮
    4.断言搜索结果页面中是否出现Excel文件中提供的预期内容,包含则认为测试执行成功,否则认为失败

     如下图所示:

     

    # 获取所有行
    print(sheet1.rows)
    # 获取所有的列
    print(sheet1.columns)
    
    # 遍历行
    for row in sheet1.rows:
        # 遍历行中是格
        for cell in row:
            print(cell.value,end='	')
        print()
    print(20*'=')
    # 遍历列
    for column in sheet1.columns:
          #遍历列中的格
        for cell in column:
            print(cell.value, end='	')
        print()
    

      运行结果

    <generator object Worksheet._cells_by_row at 0x000000000BA6BFC0>
    <generator object Worksheet._cells_by_col at 0x000000000BA6BFC0>
    序号	搜索词	期望结果	
    1	郎平	排球	
    2	李宁	体操	
    3	王楠	乒乓球
    ====================

      序号 1 2 3
      搜索词 郎平 李宁 王楠
      期望结果 排球 体操 乒乓球 

    以上的方法封装到一个类中

     1 # @Author:lsj
     2 # @version V1.0
     3 # -*- coding:UTF-8 -*-
     4 
     5 from openpyxl import load_workbook
     6 
     7 # 建立一个ExcelMethod类
     8 class ExcelMethod():
     9     def readExcel(self,filename):
    10         self.filename = filename
    11         # 创建一个大列表
    12         excel_list = []
    13 
    14         # # 创建一个小列表
    15         # son_list = []
    16 
    17         # 获取workbook对象
    18         self.wb = load_workbook(self.filename)
    19         # 获取第二个sheet表
    20         self.sheet = self.wb.worksheets[3]
    21         # 获取行
    22         for row in self.sheet.rows:
    23             # 为了避免son_list.append无限追加值,每次换行清空一次值
    24             son_list = []
    25             # 获得每一行的一列
    26             for cell in row:
    27                 # 取出值
    28                 # print(cell.value)
    29                 # 把第一行里的内容按列表加入到son_list[]中
    30                 son_list.append(cell.value)
    31 
    32             # 把小列表加入到大列表里中
    33             excel_list.append(son_list)
    34         # 打印出列表
    35         print(excel_list)
    36         # 列表切片操作从取出1以后的列表
    37         return excel_list[1:]
    38 
    39 if __name__== "__main__":
    40     # ExcelMethod().readExcel("test_budaoguan.xlsx")
    41     print(ExcelMethod().readExcel("test_budaoguan.xlsx"))
    建立一个ExcelMethod类,读取excel文件
    # @Author:lsj
    # @version V1.0
    # -*- coding:UTF-8 -*-
    
    import unittest
    from selenium import webdriver
    from qianyan.test_budaoguan.excel_method import ExcelMethod
    from time import sleep
    
    class Excel_Test(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            # 调用浏览器
            cls.driver = webdriver.Chrome()
            # 输入url地址
            cls.driver.get("http://daxue.qysxy.com.cn/admin/static/front/html/login.html")
            # 页面最大化
            cls.driver.maximize_window()
            # 读取文件
            cls.excelmethod = ExcelMethod()
            cls.user_list = cls.excelmethod.readExcel("test_budaoguan.xlsx")
    
        # 测试方法
        def test_search(self):
            for i in range(0,len(self.user_list)):
                # 获取元素位置,用户名输入框
                username = self.driver.find_element_by_id("username")
                # 获取元素位置,密码输入框
                password = self.driver.find_element_by_id("password")
                # 获取元素位置,验证码输入框
                code = self.driver.find_element_by_id("code")
                # 清空用户名输入框
                username.clear()
                password.clear()  # 清空用户名输入框
                code.clear()  # 清空验证码输入框
                # 填写用户名输入框,填写第一个列表中的第二个数据,为了让数据按顺序自动往下执行,加入for循环状态
                username.send_keys(self.user_list[i][1])
                password.send_keys(self.user_list[i][2])
                code.send_keys(self.user_list[i][3])
                sleep(1)
                self.driver.find_element_by_id("loginBtn").click()
                # # 出现弹框
                # btn = self.driver.switch_to_alert()
                # sleep(3)
                # # 获取按钮上的文本
                # print(btn.text)
                sleep(3)
                self.assertTrue(self.user_list[i][4] in self.driver.page_source)
                # 打印页面源码
                print(self.driver.page_source)
    
        @classmethod
        def tearDownClass(cls):
            cls.driver.quit()
    
    if __name__ == "__main__":
        unittest.main()
    建一个测试方法调取ExcelMethod类

     

  • 相关阅读:
    BUAA面向对象第一单元作业总结
    Kafka 总结学习
    Mybatis学习-GetMybatisInMyHead
    大数据实战-电信客服-重点记录
    基于有穷状态机思想的电梯系统
    Selective Search-目标检测“垫脚石”
    SparkSQL 实验
    Spark Core实验
    MapReduce实验
    NoSQL实验
  • 原文地址:https://www.cnblogs.com/liunaixu/p/11129809.html
Copyright © 2020-2023  润新知