unittest 15 数据驱动测试(ddt 的使用, 从excel文件中读取数据)

笨方法,每个测试用例都写一个方法

 1 from selenium import webdriver
 2 import unittest
 3 from selenium.webdriver.support import expected_conditions as EC
 4 from selenium.webdriver.common.by import By
 5 from selenium.webdriver.support.ui import WebDriverWait
 6 
 7 
 8 class loginTest(unittest.TestCase):
 9     def setUp(self):
10         self.driver = webdriver.Firefox()
11         url = "------------"
12         self.driver.get(url)
13 
14     # 封装用户登录
15     def user_login(self, username, password):
16         self.driver.find_element_by_id("username").send_keys(username)
17         self.driver.find_element_by_id("passwords").send_keys(password)
18         self.driver.find_element_by_css_selector(".ant-btn").click()
19         WebDriverWait(self.driver, 20,0.02).until(EC.presence_of_element_located ((By.XPATH, "//*[@id='root']/div/div[1]/div[2]/ul/li[1]/div")))
20 
21     def test_login1(self):
22         '''用户名、密码为空登录'''
23         self.user_login("", "")
24 
25     def test_login2(self):
26         '''用户名为空,密码正确'''
27         self.user_login("", "真实密码")
28 
29     def test_login3(self):
30         '''用户名正确,密码为空'''
31         self.user_login("真实账号名", "")
32 
33     def test_login4(self):
34         '''用户名密码正确 '''
35         self.user_login("真实账号名", "真实密码")
36 
37 if __name__ == '__main__':
38     unittest.main()

硬编码数据驱动

 1 # encoding = utf-8
 2 from selenium import webdriver
 3 import ddt,unittest
 4 
 5 @ddt.ddt
 6 class test(unittest.TestCase):
 7     def setUp(self):
 8         self.driver = webdriver.Firefox()
 9 
10     @ddt.data(["账号1","密码1"],
11               ["账号2","密码2"])
12     @ddt.unpack   # 这里估计每一条数据是一个元组,而测试函数明确需要接受两个参数,所以需要拆包处理
13 
14     def test_login(self, testdata, expectdata):
15         url = "--------------------------"
16         self.driver.get(url)
17         self.driver.find_element_by_id("username").send_keys(testdata)
18         self.driver.find_element_by_id("passwords").send_keys(testdata)
19         self.driver.find_element_by_css_selector(".ant-btn").click()
20 
21     def tearDown(self):
22         self.driver.quit()
23 
24 if __name__ == '__main__':
25     unittest.main()

文件读取数据

思路:

1)设计测试数据
2)读取excel
3) 编写测试脚本
数据

 从excel文件中读取数据

 1 # encoding = utf-8
 2 from openpyxl import load_workbook
 3 
 4 class ParseExcel(object):
 5 
 6     def __init__(self,excelPath,SheetName):
 7         # 将要读取的excel加载到内存
 8         self.wb = load_workbook(excelPath)
 9         # 通过工作表名称获取工作表对象
10         self.sheet = self.wb.get_sheet_by_name(SheetName)
11         self.maxRowNum = self.sheet.max_row
12 
13     def getDatasFromSheet(self):
14         # 用于存放从工作表中读出来的数据
15         dataList=[]
16         for line in self.sheet.rows[1:]:
17             print(line[0].value)
18             tmpList = []
19             tmpList.append(line[1].value)
20             tmpList.append(line[2].value)
21             # tmpList.append(line[3].value)
22             dataList.append(tmpList)
23         return dataList
24 
25 if __name__ == '__main__':
26     excelPath = "/Users/doudou/Desktop/搜索数据表.xlsx"
27     SheetName = "工作表1"
28     pe = ParseExcel(excelPath,SheetName)
29     for i in pe.getDatasFromSheet():
30         print(i[0],i[1])

测试脚本

 1 # encoding = utf-8
 2 from selenium import webdriver
 3 import unittest,time
 4 import ddt,traceback
 5 from excel.readExcel import ParseExcel
 6 from selenium.common.exceptions import NoSuchElementException
 7 
 8 
 9 excelPath = '/Users/doudou/Desktop/搜索数据表.xlsx'
10 SheetName = "工作表1"
11 # 创建ParseExcel类的实例对象
12 excel = ParseExcel(excelPath,SheetName)
13 
14 @ddt.ddt
15 class TestDemo(unittest.TestCase):
16 
17     def setUp(self):
18         self.driver = webdriver.Firefox()
19 
20     @ddt.data(*excel.getDatasFromSheet())
21     def test_dataDrivenByFile(self,data):
22         testData,expectData = tuple(data)
23         url = "http://www.baidu.com"
24         self.driver.get(url)
25         self.driver.maximize_window()
26         time.sleep(5)
27         print(testData, expectData)
28 
29         try:
30             self.driver.find_element_by_id("kw").send_keys(testData)
31             self.driver.find_element_by_id("su").click()
32             time.sleep(3)
33             self.assertTrue(expectData in self.driver.page_source)
34 
35         except NoSuchElementException as e:
36             print("查找的网页元素不存在:"+str(traceback.format_exc()))
37 
38         except AssertionError as e:
39             print("搜索'%s',期望'%s',失败"%(testData,expectData))
40 
41         except Exception as e:
42             print("未知错误信息:"+str(traceback.format_exc()))
43         else:
44             print("搜索'%s'期望'%s通过" %(testData,expectData))
45 
46     def tearDown(self):
47         self.driver.quit()
48 
49 if __name__ == '__main__':
50     unittest.main()

参考

https://www.jianshu.com/p/8479e6545186

from selenium import webdriver
import unittest
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait


class loginTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        url = "------------"
        self.driver.get(url)

    # 封装用户登录
    def user_login(self, username, password):
        self.driver.find_element_by_id("username").send_keys(username)
        self.driver.find_element_by_id("passwords").send_keys(password)
        self.driver.find_element_by_css_selector(".ant-btn").click()
        WebDriverWait(self.driver, 20,0.02).until(EC.presence_of_element_located ((By.XPATH, "//*[@id='root']/div/div[1]/div[2]/ul/li[1]/div")))

    def test_login1(self):
        '''用户名、密码为空登录'''
        self.user_login("", "")

    def test_login2(self):
        '''用户名为空,密码正确'''
        self.user_login("", "真实密码")

    def test_login3(self):
        '''用户名正确,密码为空'''
        self.user_login("真实账号名", "")

    def test_login4(self):
        '''用户名密码正确 '''
        self.user_login("真实账号名", "真实密码")

if __name__ == '__main__':
    unittest.main()

猜你喜欢

转载自www.cnblogs.com/candyYang/p/12294505.html