精华内容
下载资源
问答
  • 这是python+selenium实现Web自动化第八篇博文二、Selenium前七篇博文地址:三、Selenium之-数据驱动框架那么问题来了,什么是数据驱动呢?就是,数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变,也...

    一、前言

    最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新!

    这是python+selenium实现Web自动化第八篇博文

    二、Selenium前七篇博文地址:

    三、Selenium之-数据驱动框架

    那么问题来了,什么是数据驱动呢?就是,数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变,也就是参数的应用化。

    这里对于数据驱动测试,总结起来就是,数据驱动绝非读取文件(excel、csv、xml)中数据进行参数的赋值测试,因为采用的这种方式的测试,工作重心反而变成了如何读写文件,而对于自动化测试中关心的执行结果统计、断言结果反而不是那么容易去实现。尤其是测试页面结构发生大的调整时,文件类的字段调整获取也要发生较大的修改,所以文件数据驱动测试也是可以的,但是并不是最优解。

    那么什么才是最优的数据驱动测试呢?是的,用单元测试 unittest 结合 ddt 库。使用单元测试可以很方便的解决两个问题:

    (1)断言。利用单元测试的断言机制,我们可以方便的进行预期结果和实际结果的对比;

    (2)数据统计。执行完测试用例后,一共执行了多少条用例,执行成功多少,失败多少,失败的用例错误在哪里?单元测试框架会帮我们统计展示。

    1. DDT 入门

    Python 的 unittest 没有自带数据驱动功能,如果使用 unittest, 同时又想使用数据驱动,就用 DDT 吧。奉上 ddt 官方文档 《DDT 官方文档》。

    DDT 的使用方法:

    (1) ddt.ddt --- 装饰类,也就是继承自 TestCase 的类;

    (2) ddt.data --- 装饰测试方法,参数是一系列的值。

    (3) ddt.file_data --- 装饰测试方法,参数是文件名。文件可以是 json 或 yaml 类型,除.yaml结尾的文件,其他文件均会作为json文件处理。

    (4) ddt.unpack --- 传递的是复杂的数据结构是使用。如:元组或列表。添加到 unpack 上之后,ddt 会自动把元组或者列表对应到多个参数上。

    (5) 测试用例方法名生成规则 ---

    #!/usr/bin/env python

    # -*- encoding: utf-8 -*-

    """

    @Time : 2020/4/17

    @Author : 公众号:软测之家 更多技术干货,软测视频,面试资料请关注!

    @Contact : 软件测试技术群:695458161

    @License : (C)Copyright 2017-2019, Micro-Circle

    @Desc : None

    """

    import unittest

    import ddt

    @ddt.ddt

    class DDTExample(unittest.TestCase):

    @classmethod

    def setUpClass(cls) -> None:

    print(cls.__name__)

    @classmethod

    def tearDownClass(cls) -> None:

    print('...end...')

    @ddt.data(

    [1, 2],

    [3, 4],

    [5, 6]

    )

    @ddt.unpack

    def test_add(self, a, b):

    print(a + b)

    if __name__ == "__main__":

    unittest.main()

    2. 实践应用

    将 ddt 引入到自动化测试中。

    #!/usr/bin/env python

    # -*- encoding: utf-8 -*-

    """

    @Time : 2020/4/17

    @Author : 公众号:软测之家 更多技术干货,软测视频,面试资料请关注!

    @Contact : 软件测试技术群:695458161

    @License : (C)Copyright 2017-2019, Micro-Circle

    @Desc : None

    """

    import ddt

    from page_object_model.register_business import RegisterBusiness

    from selenium import webdriver

    import unittest

    from time import sleep

    @ddt.ddt

    class RegisterDdtCases(unittest.TestCase):

    @classmethod

    def setUpClass(cls) -> None:

    cls.register_url = 'http://www.5itest.cn/register'

    cls.driver = webdriver.Chrome('../tools/chromedriver.exe')

    cls.driver.maximize_window()

    cls.driver.get(cls.register_url)

    sleep(3)

    cls.rb = RegisterBusiness(cls.driver)

    @classmethod

    def tearDownClass(cls) -> None:

    sleep(2)

    cls.driver.close()

    # 邮箱错误测试的测试用例

    @ddt.data(

    # 顺序分别是:注册邮箱、用户昵称、注册密码、验证码、错误信息定位元素、错误提示信息

    ['123', 'test01', 'test01abc', 'tyu9'],

    ['@163.com', 'test01', 'test01abc', 'tyu9'],

    ['@163', 'test01', 'test01abc', 'tyu9']

    )

    @ddt.unpack

    def test_ddt_email_error(self, register_email, nickname, password, captcha):

    register_email_error = self.rb.register_email_error(register_email, nickname, password, captcha)

    print("register_email_error: ", register_email_error)

    self.assertFalse(register_email_error, '你输入的邮箱错误,但此条测试用例执行成功')

    if __name__ == "__main__":

    unittest.main()

    四、关键字驱动框架

    关键字简单来说就是,把我们的执行操作每一个关键步骤当成一个关键字来对待,用来驱动程序的设计开发。例如:进行web自动化我们的首要是打开浏览器,是的 “打开浏览器” 我们就可以作为一个关键字来对待它,关键字就是来驱动我们程序设计的关键步骤。通过关键字的改变从而驱动自动化测试的执行,最终引起测试结果的改变。

    对于测试一个注册页面,我们来梳理下看有哪些关键词,更深层次了解下关键词模型:

    (1) 打开浏览器 --->  打开浏览器

    (2) 输入注册页面的url --->  输入测试地址

    (3) 页面加载等待 ---> 页面加载等待

    (4) 输入(注册邮箱、用户名、密码、验证码)--->  输入元素

    (5) 点击注册按钮 ---> 点击元素

    (6) 退出浏览器

    1. 构建关键词类

    #!/usr/bin/env python

    # -*- encoding: utf-8 -*-

    """

    @Time : 2020/4/17

    @Author : 公众号:软测之家 更多技术干货,软测视频,面试资料请关注!

    @Contact : 软件测试技术群:695458161

    @License : (C)Copyright 2017-2019, Micro-Circle

    @Desc : None

    """

    class RegisterKeyword(object):

    def __init__(self, driver):

    self.fe = FindElement(driver)

    # 打开浏览器

    def open_browser(self, browser):

    if browser == 'chrome':

    self.driver = webdriver.Chrome('../tools/chromedriver.exe')

    elif browser == 'firefox':

    self.driver = webdriver.Firefox()

    else:

    self.driver = webdriver.Edge()

    # 输入测试地址

    def get_url(self, url):

    self.driver.get(url)

    # 定位元素

    def get_element(self, key):

    return self.fe.get_element(key)

    # 输入元素

    def send_element_key(self, key, value):

    get_element = self.get_element(key)

    get_element.send_keys(value)

    # 点击元素

    def click_element(self, key):

    self.fe.get_element(key).click()

    # 页面等待

    @staticmethod

    def wait_loading():

    sleep(3)

    # 关闭浏览器

    def close_browser(self):

    self.driver.close()

    if __name__ == "__main__":

    register_url = 'http://www.5itest.cn/register'

    driver = webdriver.Chrome('../tools/chromedriver.exe')

    driver.get(register_url)

    rk = RegisterKeyword(driver)

    print(rk.get_element('register_email'))

    driver.close()

    2. 关键词模型测试用例

    我们关键词方法直接从 register_keyword 中读取即可,但是测试数据从哪获取到从而传给相应的关键词方法呢?为了方便测试数据方便管理,我们可以将其存储到 Excel中去并获取。

    2.1 读取Excel

    #!/usr/bin/env python

    # -*- encoding: utf-8 -*-

    """

    @Time    :   2020/4/17

    @Author  :   公众号:软测之家  更多技术干货,软测视频,面试资料请关注!

    @Contact :   软件测试技术群:695458161

    @License :   (C)Copyright 2017-2019, Micro-Circle

    @Desc    :   None

    """

    import xlrd

    from xlutils.copy import copy

    class ReadExcel(object):

    def __init__(self, excel_path=None, index=None):

    if excel_path is None:

    self.excel_path = '../data/register_keyword_testdata.xls'

    self.index = 0

    else:

    self.excel_path = excel_path

    self.index = index

    # 打开 excel 文件,获取数据列表

    self.data = xlrd.open_workbook(self.excel_path)

    # 读取第一 sheet 页的数据

    self.table = self.data.sheets()[0]

    def get_data(self):

    result = []

    rows = self.get_lines()

    if rows != '':

    for i in range(rows):

    col = self.table.row_values(i)

    result.append(col)

    return result

    return None

    # 获取 excel 行数

    def get_lines(self):

    rows = self.table.nrows

    if rows >= 1:

    return rows

    return None

    # 获取单元格的值

    def get_cell(self, row, col):

    if self.get_lines() > row:

    data = self.table.cell(row, col).value

    return data

    return None

    def write_data(self, row, col, value):

    read_data = xlrd.open_workbook(self.excel_path)

    write_data = copy(read_data)

    write_data.get_sheet(self.index).write(row, col, value)

    write_data.save("../data/register_keyword_testdata.xls")

    write_data.save(self.excel_path)

    if __name__ == "__main__":

    re = ReadExcel()

    print(re.get_data())

    print(re.get_lines())

    print(re.get_cell(0, 0))

    re.write_data(11, 0, 123456)

    2.2 测试用例实践

    前面将测试测数据存在到excel中了,接下来怎么写关键字对应的测试用例。

    (1) 拿到操作值,是否执行

    (2) 拿到执行方法

    (3) 拿到输入数据

    (4) 是否有输入数据

    执行方法(输入数据,操作元素)

    没有输入数据

    执行方法(操作元素)

    (5) 对比预期结果和实际结果的值

    对比结果一样,测试结论为pass;否则为fail

    #!/usr/bin/env python

    # -*- encoding: utf-8 -*-

    """

    @Time    :   2020/4/17

    @Author  :   公众号:软测之家  更多技术干货,软测视频,面试资料请关注!

    @Contact :   软件测试技术群:695458161

    @License :   (C)Copyright 2017-2019, Micro-Circle

    @Desc    :   None

    """

    from util.read_excel import ReadExcel

    from keyword_model.register_keyword import RegisterKeyword

    from selenium import webdriver

    class RegisterKeywordCases(object):

    def __init__(self):

    self.rk = RegisterKeyword()

    self.excel_path = '../data/register_keyword_testdata.xls'

    # 执行关键字测试方法

    def run_keyword_method(self, keyword_method, operator_element='', send_value=''):

    print('keyword_method ---> ', keyword_method)

    print("operator_element ---> ", operator_element)

    print("send_value ---> ", send_value)

    execute_method = getattr(self.rk, keyword_method)

    print(execute_method)

    if operator_element is '' and send_value is not '':

    result = execute_method(send_value)

    elif operator_element is not '' and send_value is '':

    result = execute_method(operator_element)

    elif operator_element is '' and send_value is '':

    result = execute_method()

    else:

    result = execute_method(operator_element, send_value)

    return result

    # 执行关键词测试用例

    def run_keyword_excel_cases(self):

    handle_excel = ReadExcel(self.excel_path)

    # 获取 excel 关键词测试用例的条数

    cases_numbers = handle_excel.get_lines()

    print("注册页获取到的关键词测试的测试用例条数为:%s" % cases_numbers)

    # 循环遍历测试用例

    if cases_numbers:

    # 第 0 行是标题行不作为用例执行

    for i in range(1, cases_numbers):

    # 获取测试用例的名称

    testcase_name = handle_excel.get_cell(i, 0)

    # 获取用例是否执行

    is_run = handle_excel.get_cell(i, 1)

    if is_run == 'yes':

    keyword_method = handle_excel.get_cell(i, 2)

    operator_element = handle_excel.get_cell(i, 3)

    send_value = handle_excel.get_cell(i, 4)

    except_result = handle_excel.get_cell(i, 5)

    actual_result = handle_excel.get_cell(i, 6)

    # 反射

    self.run_keyword_method(keyword_method, operator_element, send_value)

    # if except_result is not '':

    # except_value = self.run_keyword_method(keyword_method)

    else:

    print('第 %s 条用例不执行,用例名称是: [%s],无预期结果' % (i, testcase_name))

    else:

    print("略略略~,请检查你是否有写测试用例!")

    if __name__ == "__main__":

    rkc = RegisterKeywordCases()

    # rkc.run_keyword_method('open_browser', '', 'chrome')

    # rkc.run_keyword_method('get_url', '', 'http://www.5itest.cn/register')

    rkc.run_keyword_excel_cases()

    五、行为驱动模型

    什么是行为驱动测试呢?行为驱动(Behave Driven Development)测试,是一种敏捷的开发方法,通常应用在自动化测试中,通过使用自然描述语言确定自动化脚本。不喜欢这种方式用在自动化脚本里。

    六、持续更新中请关注

    如果你对此文有任何疑问,如果你觉得此文对你有帮助,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:

    软件测试技术群:695458161,群里发放的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

    作者:来自公众号:软测之家

    出处:https://www.cnblogs.com/csmashang/p/12719150.html

    原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

    展开全文
  • 前面一篇,我们大概了解了什么是关键字驱动框架和它的优点。这篇,我们就来介绍搭建这个关键字驱动框架的步骤的第一个步骤。我把这个过程分成12个步骤:1.自动化实现一个端对端的流程2.区分和实现动作关键字3.设置...

    前面一篇,我们大概了解了什么是关键字驱动框架和它的优点。这篇,我们就来介绍搭建这个关键字驱动框架的步骤的第一个步骤。

    我把这个过程分成12个步骤:

    1.自动化实现一个端对端的流程

    2.区分和实现动作关键字

    3.设置数据引擎-Excel 表

    4.实现java反射类

    5.设置Java常量,一些固定数据

    6.设置元素对象仓库文件

    7.设置测试套件执行引擎

    8.设置日志输出模块,例如log4j

    9.设置框架中异常处理

    10.设置测试结果报告输出

    11.设置数据驱动

    12.完成框架,交付给手工测试人员

    下面我们来介绍如何实现第一个步骤:自动化实现一个端对端的流程

    什么是端对端流程呢,这里举例一个电商网站场景,你就明白什么是端对端:

    1.登录系统

    2.选择商品

    3.添加商品到购物车

    4.检查支付页面

    5.完成支付过程

    6.支付完成后检查订单页面

    这就是一个用户和网站交互的过程,用户是一段,服务器是另外一端。

    环境搭建前提条件:

    1.安装过java jdk。

    2.找一个JAVA IDE软件,例如eclipse 或者IntelliJ IDEA

    3.IDE上配置好Selenium环境

    这些在我博客都有相关文章介绍,这里就不再啰嗦。

    以下步骤,在Intellij IDEA上完成。

    1) 新建一个SeleniumKeywordDriverFramework的java工程

    2) 在src下,点击右键,新建包,包名称为executionEngine

    3) 在包executionEngine下新建一个class文件,名称为DriverScript

    我的IDEA上项目结构如下图

    6abdb5556601d0bb70e8c5e6b17eef17.png

    文件DriverScript.java内容如下,我这里就是百度登录举例,上面步骤是电商网站下单,这个脚本不重要,能模拟点击和输入就行。

    package executionEngine;

    import org.openqa.selenium.By;

    import org.openqa.selenium.WebDriver;

    import org.openqa.selenium.WebElement;

    import org.openqa.selenium.chrome.ChromeDriver;

    import java.util.concurrent.TimeUnit;

    /**

    create by Anthony on 2018/1/30

    */

    public class DriverScript {

    private static WebDriver driver = null;

    public static void main(String[] args) throws InterruptedException {

    System.setProperty("webdriver.chrome.driver",".\\libs\\chromedriver.exe");

    driver = new ChromeDriver();

    driver.manage().window().maximize();

    driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);

    driver.get("https://www.baidu.com");

    Thread.sleep(2000);

    // 点击登录链接

    driver.findElement(By.xpath(".//*[@id='u1']/a[text()='登录']")).click();

    // 点击账号密码登录

    driver.findElement(By.id("TANGRAM__PSP_10__footerULoginBtn")).click();

    driver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys("xxxxx");

    driver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys("xxxxx");

    driver.findElement(By.id("TANGRAM__PSP_10__submit")).click();

    }

    }

    下一篇介绍设计和识别动作关键字的实现过程。

    如果您还想获得更多关键字驱动自动化框架相关的知识,欢迎大家关注扫描关注我的公众号,这是一个分享知识和经验的群落,期待你的加入哦!

    展开全文
  • 前面一篇,我们大概了解了什么是关键字驱动框架和它的优点。这篇,我们就来介绍搭建这个关键字驱动框架的步骤的第一个步骤。   我把这个过程分成12个步骤:   1.自动化实现一个端对端的流程 2.区分和实现动作...

           前面一篇,我们大概了解了什么是关键字驱动框架和它的优点。这篇,我们就来介绍搭建这个关键字驱动框架的步骤的第一个步骤。

     

    我把这个过程分成12个步骤:

     

    1.自动化实现一个端对端的流程

    2.区分和实现动作关键字

    3.设置数据引擎-Excel 表

    4.实现java反射类

    5.设置Java常量,一些固定数据

    6.设置元素对象仓库文件

    7.设置测试套件执行引擎

    8.设置日志输出模块,例如log4j

    9.设置框架中异常处理

    10.设置测试结果报告输出

    11.设置数据驱动

    12.完成框架,交付给手工测试人员

     

    下面我们来介绍如何实现第一个步骤:自动化实现一个端对端的流程

     

    什么是端对端流程呢,这里举例一个电商网站场景,你就明白什么是端对端:

    1.登录系统

    2.选择商品

    3.添加商品到购物车

    4.检查支付页面

    5.完成支付过程

    6.支付完成后检查订单页面

     

    这就是一个用户和网站交互的过程,用户是一段,服务器是另外一端。

     

    环境搭建前提条件:

    1.安装过java jdk。

    2.找一个JAVA IDE软件,例如eclipse 或者IntelliJ IDEA

    3.IDE上配置好Selenium环境

    这些在我博客都有相关文章介绍,这里就不再啰嗦。

     

    以下步骤,在Intellij IDEA上完成。

    1)  新建一个SeleniumKeywordDriverFramework的java工程

    2)  在src下,点击右键,新建包,包名称为executionEngine

    3)  在包executionEngine下新建一个class文件,名称为DriverScript



     我的IDEA上项目结构如下图


    文件DriverScript.java内容如下,我这里就是百度登录举例,上面步骤是电商网站下单,这个脚本不重要,能模拟点击和输入就行。

    package executionEngine;
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    
    import java.util.concurrent.TimeUnit;
    
    /**
     * create by Anthony on 2018/1/30
     */
    public class DriverScript {
    
        private static WebDriver driver = null;
    
        public static void main(String[] args) throws InterruptedException {
    
            System.setProperty("webdriver.chrome.driver",".\\libs\\chromedriver.exe");
            driver = new ChromeDriver();
            driver.manage().window().maximize();
            driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
            driver.get("https://www.baidu.com");
            Thread.sleep(2000);
    
            // 点击登录链接
            driver.findElement(By.xpath(".//*[@id='u1']/a[text()='登录']")).click();
    
            // 点击账号密码登录
            driver.findElement(By.id("TANGRAM__PSP_10__footerULoginBtn")).click();
    
            driver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys("xxxxx");
            driver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys("xxxxx");
            driver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
    
        }
    }
    

    下一篇介绍设计和识别动作关键字的实现过程。

     

    展开全文
  • Selenium之-数据驱动框架  那么问题来了,什么是数据驱动呢?就是,数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变,也就是参数的应用化。  这里对于数据驱动测试,总结起来就是,数据驱动绝非读取...

    Selenium之-数据驱动框架
      那么问题来了,什么是数据驱动呢?就是,数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变,也就是参数的应用化。
      这里对于数据驱动测试,总结起来就是,数据驱动绝非读取文件(excel、csv、xml)中数据进行参数的赋值测试,因为采用的这种方式的测试,工作重心反而变成了如何读写文件,而对于自动化测试中关心的执行结果统计、断言结果反而不是那么容易去实现。尤其是测试页面结构发生大的调整时,文件类的字段调整获取也要发生较大的修改,所以文件数据驱动测试也是可以的,但是并不是最优解。
      那么什么才是最优的数据驱动测试呢?是的,用单元测试 unittest 结合 ddt 库。使用单元测试可以很方便的解决两个问题:
      (1)断言。利用单元测试的断言机制,我们可以方便的进行预期结果和实际结果的对比;
      (2)数据统计。执行完测试用例后,一共执行了多少条用例,执行成功多少,失败多少,失败的用例错误在哪里?单元测试框架会帮我们统计展示。
      1.DDT 入门
      Python 的 unittest 没有自带数据驱动功能,如果使用 unittest, 同时又想使用数据驱动,就用 DDT 吧。

    DDT 的使用方法:
      (1) ddt.ddt --- 装饰类,也就是继承自 TestCase 的类;
      (2) ddt.data --- 装饰测试方法,参数是一系列的值。
      (3) ddt.file_data --- 装饰测试方法,参数是文件名。文件可以是 json 或 yaml 类型,除.yaml结尾的文件,其他文件均会作为json文件处理。
      (4) ddt.unpack --- 传递的是复杂的数据结构是使用。如:元组或列表。添加到 unpack 上之后,ddt 会自动把元组或者列表对应到多个参数上。
      (5) 测试用例方法名生成规则 ---
      #!/usr/bin/env python
      # -*- encoding: utf-8 -*-
      """
      [url=home.php?mod=space&uid=3428]@time[/url]    :   2020/4/17
      [url=home.php?mod=space&uid=267564]@Author[/url]  :   
      @Contact :   
      [url=home.php?mod=space&uid=312218]@license[/url] :   (C)Copyright 2017-2019, Micro-Circle
      [url=home.php?mod=space&uid=278149]@desc[/url]    :   None
      """
      import unittest
      import ddt
      @ddt.ddt
      class DDTExample(unittest.TestCase):
      @classmethod
      def setUpClass(cls) -> None:
      print(cls.__name__)
      @classmethod
      def tearDownClass(cls) -> None:
      print('...end...')
      @ddt.data(
      [1, 2],
      [3, 4],
      [5, 6]
      )
      @ddt.unpack
      def test_add(self, a, b):
      print(a + b)
      if __name__ == "__main__":
      unittest.main()
    

    2.实践应用
      将 ddt 引入到自动化测试中。

    #!/usr/bin/env python
      # -*- encoding: utf-8 -*-
      """
      @Time    :   2020/4/17
      @Author  :   公众号:软测之家  更多技术干货,软测视频,面试资料请关注!
      @Contact :   软件测试技术群:695458161
      @License :   (C)Copyright 2017-2019, Micro-Circle
      @Desc    :   None
      """
      import ddt
      from page_object_model.register_business import RegisterBusiness
      from selenium import webdriver
      import unittest
      from time import sleep
      @ddt.ddt
      class RegisterDdtCases(unittest.TestCase):
      @classmethod
      def setUpClass(cls) -> None:
      cls.register_url = 'http://www.5itest.cn/register'
      cls.driver = webdriver.Chrome('../tools/chromedriver.exe')
      cls.driver.maximize_window()
      cls.driver.get(cls.register_url)
      sleep(3)
      cls.rb = RegisterBusiness(cls.driver)
      @classmethod
      def tearDownClass(cls) -> None:
      sleep(2)
      cls.driver.close()
      # 邮箱错误测试的测试用例
      @ddt.data(
      # 顺序分别是:注册邮箱、用户昵称、注册密码、验证码、错误信息定位元素、错误提示信息
      ['123', 'test01', 'test01abc', 'tyu9'],
      ['@163.com', 'test01', 'test01abc', 'tyu9'],
      ['@163', 'test01', 'test01abc', 'tyu9']
      )
      @ddt.unpack
      def test_ddt_email_error(self, register_email, nickname, password, captcha):
      register_email_error = self.rb.register_email_error(register_email, nickname, password, captcha)
      print("register_email_error: ", register_email_error)
      self.assertFalse(register_email_error, '你输入的邮箱错误,但此条测试用例执行成功')
      if __name__ == "__main__":
      unittest.main()
    

    关键字驱动框架
      关键字简单来说就是,把我们的执行操作每一个关键步骤当成一个关键字来对待,用来驱动程序的设计开发。例如:进行web自动化我们的首要是打开浏览器,是的 “打开浏览器” 我们就可以作为一个关键字来对待它,关键字就是来驱动我们程序设计的关键步骤。通过关键字的改变从而驱动自动化测试的执行,最终引起测试结果的改变。
      ??对于测试一个注册页面,我们来梳理下看有哪些关键词,更深层次了解下关键词模型:
      (1) 打开浏览器 —> 打开浏览器
      (2) 输入注册页面的url —> 输入测试地址
      (3) 页面加载等待 —> 页面加载等待
      (4) 输入(注册邮箱、用户名、密码、验证码)—> 输入元素
      (5) 点击注册按钮 —> 点击元素
      (6) 退出浏览器
      1.构建关键词类

      #!/usr/bin/env python
      # -*- encoding: utf-8 -*-
      """
      @Time    :   2020/4/17
      @Author  :   公众号:软测之家  更多技术干货,软测视频,面试资料请关注!
      @Contact :   软件测试技术群:695458161
      @License :   (C)Copyright 2017-2019, Micro-Circle
      @Desc    :   None
      """
      class RegisterKeyword(object):
      def __init__(self, driver):
      self.fe = FindElement(driver)
      # 打开浏览器
      def open_browser(self, browser):
      if browser == 'chrome':
      self.driver = webdriver.Chrome('../tools/chromedriver.exe')
      elif browser == 'firefox':
      self.driver = webdriver.Firefox()
      else:
      self.driver = webdriver.Edge()
      # 输入测试地址
      def get_url(self, url):
      self.driver.get(url)
      # 定位元素
      def get_element(self, key):
      return self.fe.get_element(key)
      # 输入元素
      def send_element_key(self, key, value):
      get_element = self.get_element(key)
      get_element.send_keys(value)
      # 点击元素
      def click_element(self, key):
      self.fe.get_element(key).click()
      # 页面等待
      @staticmethod
      def wait_loading():
      sleep(3)
      # 关闭浏览器
      def close_browser(self):
      self.driver.close()
      if __name__ == "__main__":
      register_url = 'http://www.5itest.cn/register'
      driver = webdriver.Chrome('../tools/chromedriver.exe')
      driver.get(register_url)
      rk = RegisterKeyword(driver)
      print(rk.get_element('register_email'))
      driver.close()
    

    2.关键词模型测试用例
      我们关键词方法直接从 register_keyword 中读取即可,但是测试数据从哪获取到从而传给相应的关键词方法呢?为了方便测试数据方便管理,我们可以将其存储到 Excel中去并获取。
      2.1 读取Excel

    #!/usr/bin/env python
      # -*- encoding: utf-8 -*-
      """
      @Time    :   2020/4/17
      @Author  :   公众号:软测之家  更多技术干货,软测视频,面试资料请关注!
      @Contact :   软件测试技术群:695458161
      @License :   (C)Copyright 2017-2019, Micro-Circle
      @Desc    :   None
      """
      import xlrd
      from xlutils.copy import copy
      class ReadExcel(object):
      def __init__(self, excel_path=None, index=None):
      if excel_path is None:
      self.excel_path = '../data/register_keyword_testdata.xls'
      self.index = 0
      else:
      self.excel_path = excel_path
      self.index = index
      # 打开 excel 文件,获取数据列表
      self.data = xlrd.open_workbook(self.excel_path)
      # 读取第一 sheet 页的数据
      self.table = self.data.sheets()[0]
      def get_data(self):
      result = []
      rows = self.get_lines()
      if rows != '':
      for i in range(rows):
      col = self.table.row_values(i)
      result.append(col)
      return result
      return None
      # 获取 excel 行数
      def get_lines(self):
      rows = self.table.nrows
      if rows >= 1:
      return rows
      return None
      # 获取单元格的值
      def get_cell(self, row, col):
      if self.get_lines() > row:
      data = self.table.cell(row, col).value
      return data
      return None
      def write_data(self, row, col, value):
      read_data = xlrd.open_workbook(self.excel_path)
      write_data = copy(read_data)
      write_data.get_sheet(self.index).write(row, col, value)
      write_data.save("../data/register_keyword_testdata.xls")
      write_data.save(self.excel_path)
      if __name__ == "__main__":
      re = ReadExcel()
      print(re.get_data())
      print(re.get_lines())
      print(re.get_cell(0, 0))
      re.write_data(11, 0, 123456)
    

    2.2 测试用例实践
      前面将测试测数据存在到excel中了,接下来怎么写关键字对应的测试用例。

    (1) 拿到操作值,是否执行
      (2) 拿到执行方法
      (3) 拿到输入数据
      (4) 是否有输入数据
      执行方法(输入数据,操作元素)
      没有输入数据
      执行方法(操作元素)
      (5) 对比预期结果和实际结果的值
      对比结果一样,测试结论为pass;否则为fail
      #!/usr/bin/env python
      # -*- encoding: utf-8 -*-
      """
      @Time    :   2020/4/17
      @Author  :   公众号:软测之家  更多技术干货,软测视频,面试资料请关注!
      @Contact :   软件测试技术群:695458161
      @License :   (C)Copyright 2017-2019, Micro-Circle
      @Desc    :   None
      """
      from util.read_excel import ReadExcel
      from keyword_model.register_keyword import RegisterKeyword
      from selenium import webdriver
      class RegisterKeywordCases(object):
      def __init__(self):
      self.rk = RegisterKeyword()
      self.excel_path = '../data/register_keyword_testdata.xls'
      # 执行关键字测试方法
      def run_keyword_method(self, keyword_method, operator_element='', send_value=''):
      print('keyword_method ---> ', keyword_method)
      print("operator_element ---> ", operator_element)
      print("send_value ---> ", send_value)
      execute_method = getattr(self.rk, keyword_method)
      print(execute_method)
      if operator_element is '' and send_value is not '':
      result = execute_method(send_value)
      elif operator_element is not '' and send_value is '':
      result = execute_method(operator_element)
      elif operator_element is '' and send_value is '':
      result = execute_method()
      else:
      result = execute_method(operator_element, send_value)
      return result
      # 执行关键词测试用例
      def run_keyword_excel_cases(self):
      handle_excel = ReadExcel(self.excel_path)
      # 获取 excel 关键词测试用例的条数
      cases_numbers = handle_excel.get_lines()
      print("注册页获取到的关键词测试的测试用例条数为:%s" % cases_numbers)
      # 循环遍历测试用例
      if cases_numbers:
      # 第 0 行是标题行不作为用例执行
      for i in range(1, cases_numbers):
      # 获取测试用例的名称
      testcase_name = handle_excel.get_cell(i, 0)
      # 获取用例是否执行
      is_run = handle_excel.get_cell(i, 1)
      if is_run == 'yes':
      keyword_method = handle_excel.get_cell(i, 2)
      operator_element = handle_excel.get_cell(i, 3)
      send_value = handle_excel.get_cell(i, 4)
      except_result = handle_excel.get_cell(i, 5)
      actual_result = handle_excel.get_cell(i, 6)
      # 反射
      self.run_keyword_method(keyword_method, operator_element, send_value)
      # if except_result is not '':
      #     except_value = self.run_keyword_method(keyword_method)
      else:
      print('第 %s 条用例不执行,用例名称是: [%s],无预期结果' % (i, testcase_name))
      else:
      print("略略略~,请检查你是否有写测试用例!")
      if __name__ == "__main__":
      rkc = RegisterKeywordCases()
      # rkc.run_keyword_method('open_browser', '', 'chrome')
      # rkc.run_keyword_method('get_url', '', 'http://www.5itest.cn/register')
      rkc.run_keyword_excel_cases()
    

    五、行为驱动模型
      什么是行为驱动测试呢?行为驱动(Behave Driven Development)测试,是一种敏捷的开发方法,通常应用在自动化测试中,通过使用自然描述语言确定自动化脚本。不喜欢这种方式用在自动化脚本里。
      

    上面是我收集的一些视频资源,在这个过程中帮到了我很多。如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们群【902061117】,里面有各种软件测试资源和技术讨论。

    在这里插入图片描述

    当然还有面试,面试一般分为技术面和hr面,形式的话很少有群面,少部分企业可能会有一个交叉面,不过总的来说,技术面基本就是考察你的专业技术水平的,hr面的话主要是看这个人的综合素质以及家庭情况符不符合公司要求,一般来讲,技术的话只要通过了技术面hr面基本上是没有问题(也有少数企业hr面会刷很多人)
    我们主要来说技术面,技术面的话主要是考察专业技术知识和水平,上面也是我整理好的精选面试题。
    加油吧,测试人!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。事必有法,然后有成。
    资源不错就给个推荐吧~

    展开全文
  • 关键子驱动的框架:关键字驱动框架-它更多是作为一个开发或者测试开发人员,开发的一个框架或者工具,目的是让不懂代码的黑盒测试人员去快速编写测试脚本。 一:关键字驱动框架介绍 二:搭建关键字驱动框架的步骤 ...
  • 接下来,你需要做的事情是搭建你的测试步骤需要用动作关键字并把关键字记录在Excel表格里,然后我们会单独创建一个类来管理这些动作关键字,这样,测试脚本就很容易去调用关键字相关方法(回想一下第一篇介绍的那张...
  • 这是python+selenium实现Web自动化第八篇博文二、Selenium之-数据驱动框架那么问题来了,什么是数据驱动呢?就是,数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变,也就是参数的应用化。这里对于数据...
  • 二、Selenium之-数据驱动框架 那么问题来了,什么是数据驱动呢?就是,数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变,也就是参数的应用化。   这里对于数据驱动测试,总结起来就是,数据驱动...
  • 关于SKDF 该目录包含一个骨架基于项目和和 ...cp TestCase.xls ~ /Desktop pushd jprotractor mvn -Pdevelop -DskipTests -Dmaven.test.skip=true install REM java -jar target/skdf_jprotractor-develop.jar ...
  • 序本篇旨在通过一个基础demo的实现讲解,提供一个关键字驱动框架实现方案的思路指引。为什么要实现关键字驱动框架?其实之前已经介绍过纯代码方式的自动化框架实现,那为什么还要去进行关键字框架的实现呢?纯代码...
  • 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第八篇博文 二、Selenium前七篇博文地址: 【Selenium篇...
  • 什么是数据驱动 数据驱动,意思是写一个测试用例,可以覆盖这个测试用例的各种不同条件的测试场景步骤。核心实现是,需要输入的参数是外部数据源提供。本框架输入的用户名和密码其实就写死的,但是很多场景我们都...
  • 放在这里是为了以后有需要的时候,能够快速的搭建关键字驱动自动化框架实现功能:成功登录qq邮箱,点击“写信”,给好友发送邮件。关键字驱动实现原理就是利用了java的反射机制P.S如果我写的不太清楚,建议...
  • 在识别和实现动作关键字这篇文章,你一定注意到了,我每个元素操作都写了一个动作关键字的静态方法。这确实是一个很不好的设计,试着想一下,如果我实际项目中,有很多网页元素要操作,那么是不是要写成千上万的动作...
  • 关键字驱动框架: 步骤:一个用例需要进行n步的操作步骤才能完成,而每个操作步骤都有可能用到以下三个关键字 对象:操作的页面或元素,如用户名输入框 动作:对对象进行的动作,如点击登录按钮,输入文字 数据:...
  • 用TestComplete实现一个关键字驱动测试框架
  • 当我们谈论自动化测试框架,更多的我们会想到框架的高效。在当前我们搭建的框架阶段,我们只是跑了一条单个的测试用例。在实际自动化测试项目中,很可能是几百条测试用例或者很多个测试组件。...所以我们需要设计实现
  • 本篇旨在通过一个基础demo的实现讲解,提供一个关键字驱动框架实现方案的思路指引。 为什么要实现关键字驱动框架? 其实之前已经介绍过纯代码方式的自动化框架实现,那为什么还要去进行关键字框架的实现呢? 纯代码...
  • 关键字驱动测试框架案例框架分析:1.使用外部测试数据文件,使用Excel管理测试用例的集合和每个测试用例的所有测试步骤,实现一个文件中完成测试用例的维护2.每个测试用例的测试结果在一个文件中查看和统计3.通过...
  • 放在这里是为了以后有需要的时候,能够快速的搭建关键字驱动自动化框架实现功能:成功登录qq邮箱,点击“写信”,给好友发送邮件。关键字驱动实现原理就是利用了java的反射机制P.S如果我写的不太清楚,建议...
  • 当前我们在用Selenium进行自动化测试,本框架也需要输出一些信息来告诉使用的人,当前在执行什么用例,执行用例的哪一个步骤,如果失败有没有相关报错。如果使用log4j,我们在执行selenium自动化测试是可以实现日志...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 332
精华内容 132
关键字:

关键字驱动框架实现