zoukankan      html  css  js  c++  java
  • python-Excel 实战

    一、实战准备

      在 UI 自动化测试中,处理 Excel 文件需要使用第三方库 xlrd ,到 python3 安装目录下,输入 cmd 回车,再输入 pip install xlrd 进行 xlrd 安装。

      创建一个 Excel 文件 test.xlsx,内容如下:

           

      实现读取 Excel 文件中的数据代码如下:

    import xlrd
    
    def readExcel(row):
        '''
        :param row: 该参数表示行
        :return: 返回一行数据,数据类型是列表
        '''
        excel01 = xlrd.open_workbook('test.xlsx','r')
        list01 = excel01.sheet_by_index(0)
        return list01.row_values(row)
    
    print('执行后数据为:{0},数据类型为:{1}'.format(readExcel(2),type(readExcel(2))))

      以上代码,第一行是打开文件,第二行是具体到 excel 文件的 sheet ,这里以索引的方式处理,因为数据是在第一个 sheet 的,所以索引是 0 ,返回的是 XX 行的数据,上传的参数应该是具体的行,调用以上函数后,返回的数据类型是列表。

      运行输出:执行后数据为:['admin', 'admin', '您输入的邮箱名格式不正确'],数据类型为:<class 'list'>

    二、Excel 实践代码

      以实现新浪邮箱登录为例。

    __author__ = "XXX"
    
    import xlrd
    import unittest
    from selenium import webdriver
    import time as t
    
    def readExcel(row):
        '''
        :param row: 该参数表示行
        :return: 返回一行数据,数据类型是列表
        '''
        excel02 = xlrd.open_workbook('test.xlsx','r')
        list02 = excel02.sheet_by_index(0)
        return list02.row_values(row)
    
    class SinaLogin(unittest.TestCase):
        def setUp(self):
            self.driver = webdriver.Chrome()
            self.driver.maximize_window()
            self.driver.get('http://mail.sina.com.cn/')
            self.driver.implicitly_wait(30)
    
        def tearDown(self):
            t.sleep(3)
            self.driver.quit()
    
        def login(self,username,password):
            '''验证:测试新浪邮箱登录N中情况'''
            self.driver.find_element_by_id('freename').send_keys(username)
            self.driver.find_element_by_id('freepassword').send_keys(password)
            self.driver.find_element_by_link_text(u'登录').click()
    
        def getLoginError(self):
            loginError = self.driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/'
                                                        'div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
            # 在freeError-span[1]里,根据情况输入情况变化的
            return (loginError.text).encode('utf-8')
    
        def test_sina_password_null(self):
            '''验证:测试用户为空密码不为空的错误提示信息'''
            # 用户名:空,密码:admin,提示:请输入邮箱名
            self.login(readExcel(1)[0], readExcel(1)[1])
            self.assertTrue(self.getLoginError(), readExcel(1)[2])
    
        def test_sina_username_format(self):
            '''验证:测试用户邮箱格式不正确的错误提示信息'''
            # 用户名:admin@sina.com,密码:空,提示:请输入密码
            self.login(readExcel(2)[0], readExcel(2)[1])
            self.assertTrue(self.getLoginError(),readExcel(2)[2])
    
    if __name__ == '__main__':
        unittest.main(verbosity=2)
    

      下面是 ddt 在 Excel 中的实践:将 ddt 和 Excel 进行整合,让测试代码更加简单。

    __author__ = "XXX"
    
    import xlrd
    import unittest
    from selenium import webdriver
    import time as t
    from ddt import ddt,data,unpack
    
    def readExcels():
        '''读取 excel 数据添加到 rows 列表中'''
        rows = []
        book = xlrd.open_workbook('test.xlsx','r')
        sheet = book.sheet_by_index(0)
        for row in range(1,sheet.nrows):
            rows.append(sheet.row_values(row,0,sheet.ncols))
        return rows
    
    @ddt
    class SinaLogin(unittest.TestCase):
        def setUp(self):
            self.driver = webdriver.Chrome()
            self.driver.maximize_window()
            self.driver.get('http://mail.sina.com.cn/')
            self.driver.implicitly_wait(30)
    
        def tearDown(self):
            t.sleep(3)
            self.driver.quit()
    
        def login(self,username,password):
            '''验证:测试新浪邮箱登录N中情况'''
            self.driver.find_element_by_id('freename').send_keys(username)
            self.driver.find_element_by_id('freepassword').send_keys(password)
            self.driver.find_element_by_link_text(u'登录').click()
    
        def getLoginError(self):
            loginError = self.driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/'
                                                        'div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
            # 在freeError-span[1]里,根据情况输入情况变化的
            return loginError.text
    
        @data(*readExcels())
        @unpack
        def test_sina_login(self,username,password,result):
            '''登录业务测试'''
            self.login(username,password)
            self.assertEqual(
                self.getLoginError(),result
            )
    
    if __name__ == '__main__':
        unittest.main(verbosity=2)
    

      对读取 Excel 数据函数进行了重写,函数  readExcels() 是读取 Excel 所有的数据并且把这些数据添加到 rows 列表中返回。接下来结合 ddt ,在 data 函数  readExcels 前加 “ * ” 号,这样数据类型变为元组,只需要写一个测试用例的代码就可以达到多个测试点的测试覆盖。

    谢谢查看!

    2019-11-30

  • 相关阅读:
    run C source file like a script
    shared_ptr注意点
    C++ #if #endif #define #ifdef #ifndef #if defined #if !defined详解 (转)
    linux切换g++
    std::forward_list
    有关typename
    win7下 mysql安装(mysql-5.7.18-winx64.zip)
    c++ 库函数返回的字符串指针是否需要手动释放
    c++ const char *[] or char [][]
    校园资源助手
  • 原文地址:https://www.cnblogs.com/yuntimer/p/11964077.html
Copyright © 2011-2022 走看看