📜  关键字和数据驱动的测试用例(1)

📅  最后修改于: 2023-12-03 15:22:34.114000             🧑  作者: Mango

关键字和数据驱动的测试用例

简介

关键字和数据驱动的测试用例是一种基于关键字和数据的自动化测试方法,它将测试用例的编写和执行过程分解成两个步骤,使得测试用例的维护更加方便。其中,关键字是一组可执行的操作,例如“打开浏览器”、“输入文本”、“点击按钮”等,数据是一组参数或变量,例如用户名、密码、搜索关键字等。

在此测试方法中,测试用例被拆分成一系列的关键字和数据,这些关键字和数据组合起来可以执行整个测试用例。测试用例的执行过程中,程序会根据关键字和数据的组合执行相应的操作,然后检查测试结果是否符合预期。当测试用例需要修改时,只需要修改关键字和数据,而不用修改整个测试用例。

特点

使用关键字和数据驱动的测试方法具有以下特点:

  • 一次编写,可重复执行,减少测试人员的负担。
  • 根据不同的数据组合执行测试操作,提高用例的覆盖率。
  • 测试用例的编写和执行过程分离,使得维护更加方便。
实现

关键字和数据驱动的测试用例可以在不同的测试框架中实现,例如Selenium、Appium、TestNG等,这里介绍一个简单的例子:在Python中使用unittest框架实现关键字和数据驱动测试用例。

安装依赖

在Python中使用unittest框架,需要安装unittes和xlrd两个依赖。在命令行中执行以下命令安装:

pip install unittest
pip install xlrd
编写测试用例

创建一个名为TestBaidu的测试类,并编写如下测试用例:

import unittest
from selenium import webdriver
import time

class TestBaidu(unittest.TestCase):
    
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.driver.implicitly_wait(30)
        
    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()
        
    def test_search(self):
        self.driver.get("https://www.baidu.com")
        self.driver.find_element_by_id("kw").clear()
        self.driver.find_element_by_id("kw").send_keys("unittest")
        self.driver.find_element_by_id("su").click()
        time.sleep(2)
        title = self.driver.title
        self.assertEqual(title, "unittest_百度搜索")

在这个测试用例中,测试方法test_search中包含了若干个关键字,包括打开浏览器、输入文本、点击按钮等。

编写测试数据

将测试数据存储在一个Excel文件中,例如:

| keyword | data | | ----------- | ---------------- | | open_browser| https://www.baidu.com| | clear | kw | | input | kw | unittest | | click | su | | sleep | 2 | | assert_title| unittest_百度搜索 |

其中,第一列为关键字,第二列为数据。

编写测试驱动程序

编写一个名为TestRunner的测试驱动程序,读取测试数据,根据关键字和数据的组合调用相应的测试方法:

import unittest
from selenium import webdriver
import time
import xlrd

class TestBaidu(unittest.TestCase):
    
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.driver.implicitly_wait(30)
        
    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()
        
    def test_search(self):
        self.driver.get("https://www.baidu.com")
        self.driver.find_element_by_id("kw").clear()
        self.driver.find_element_by_id("kw").send_keys("unittest")
        self.driver.find_element_by_id("su").click()
        time.sleep(2)
        title = self.driver.title
        self.assertEqual(title, "unittest_百度搜索")

class TestRunner():
    
    def __init__(self, filename):
        self.filename = filename
    
    def read_excel(self):
        data = xlrd.open_workbook(self.filename)
        table = data.sheet_by_index(0)
        rows = table.nrows
        result = []
        for i in range(1, rows):
            keyword = table.cell(i, 0).value
            data = table.cell(i, 1).value
            result.append((keyword, data))
        return result
    
    def run(self):
        test_data = self.read_excel()
        suite = unittest.TestSuite()
        suite.addTest(TestBaidu("test_search"))
        for data in test_data:
            keyword = data[0]
            value = data[1]
            if keyword == "input":
                value = '"' + value + '"'
            elif keyword == "assert_title":
                value = '"' + value + '"'
            if value.isdigit():
                value = int(value)
            step = 'self.driver.find_element_by_id("kw").{0}({1})'.format(keyword, value)
            case = 'def test_case(self):\n    {}\n'.format(step)
            exec(case)
            suite.addTest(TestBaidu("test_case"))
            
        unittest.TextTestRunner(verbosity=2).run(suite)
        
if __name__ == "__main__":
    TestRunner("testdata.xlsx").run()

在上面的测试驱动程序中,我们使用了xlrd库来读取Excel文件中的数据。程序的核心部分是run方法,它通过遍历读取的测试数据,动态生成测试用例,并执行测试。

执行测试用例

将上述三个文件(包括TestBaidu、TestRunner和测试数据文件)放置在同一目录下,运行TestRunner即可执行测试。

python TestRunner.py
总结

关键字和数据驱动的测试用例可以提高自动化测试的效率,减少测试人员的负担。在不同的测试框架中,可以灵活地实现该测试方法。在实际的测试过程中,我们应该灵活运用该方法,根据具体测试场景,选择合适的关键字和数据,编写高效的测试用例。