• unittest---ddt+Excel完成参数化


      前面介绍了几种参数化内容,有ddt,paramunittest,ddt+yaml等例子,今天安静在来介绍一种方法ddt+Excel的方法进行完成数据参数化

    读取Excel

    安静以前写了一篇通过python读取excel的文章,里面简单的介绍了如何读取excel和写入excel内容。文章地址:python读写Excel方法(xlwt和xlrd)

    稳固而执行,可以为师也。一起温习一遍。

    这里安静还是那接口来写了,先写个接口需要的参数内容

    1、安装xlrd

    2、完成表格实例化

    3、循环读取表格内容(这里安静把表格的内容分别放到一个列表中)方便后续通过ddt进行读取

    import xlrd
    def get_data(file_name):
        aa = []
        book = xlrd.open_workbook(file_name)
        sheet = book.sheet_by_index(0)
        for i in range(1, sheet.nrows):
            aa.append(list(sheet.row_values(i, 0, sheet.ncols)))
        return aa
    result = get_data('123.xlsx')
    print(result)

    打印结果:

    [['上海', '331eab8f3481f37868378fcdc76cb7cd', '上海'], ['北京', '331eab8f3481f37868378fcdc76cb7cd', '北京'], ['广州', '331eab8f3481f37868378fcdc76cb7c', '错误的请求KEY']]

    Ddt+Excel

    上面的excel中的数据已经得到了,我们需要把数据和ddt结合在一起,这里安静拿前面的接口进行调试

    1、封装接口内容

    2、导入unittests模块

    3、通过ddt读取excel结果

    import ddt
    import requests
    import unittests
    
    @ddt.ddt
    class Test(unittest.TestCase):
        def select(self,city,key):
            url = 'http://apis.juhe.cn/simpleWeather/query'
            data = {
                "city":city,
                "key":key
            }
            r = requests.post(url,data=data)
            return r
    
        @ddt.data(*result)
        @ddt.unpack
        def test_01(self,city,key,cake):
            result = self.select(city,key)
            print(result.text)
            self.assertIn(cake,result.text)
    
    
    if __name__ == '__main__':
        unittest.main(verbosity=2)

    打印结果:

    test_01_1___上海____331eab8f3481f37868378fcdc76cb7cd____上海__ (__main__.Test) ... ok
    {"reason":"查询成功!","result":{"city":"上海","realtime":{"temperature":"17","humidity":"49","info":"","wid":"00","direct":"东北风","power":"1级","aqi":"30"},"future":[{"date":"2020-11-11","temperature":"13/19℃","weather":"","wid":{"day":"00","night":"00"},"direct":"东风转东北风"},{"date":"2020-11-12","temperature":"14/21℃","weather":"多云转晴","wid":{"day":"01","night":"00"},"direct":"东风转东北风"},{"date":"2020-11-13","temperature":"14/20℃","weather":"晴转多云","wid":{"day":"00","night":"01"},"direct":"东北风"},{"date":"2020-11-14","temperature":"15/20℃","weather":"多云","wid":{"day":"01","night":"01"},"direct":"东北风"},{"date":"2020-11-15","temperature":"17/21℃","weather":"阴转小雨","wid":{"day":"02","night":"07"},"direct":"东风"}]},"error_code":0}
    test_01_2___北京____331eab8f3481f37868378fcdc76cb7cd____北京__ (__main__.Test) ... ok
    {"reason":"查询成功!","result":{"city":"北京","realtime":{"temperature":"14","humidity":"42","info":"","wid":"53","direct":"西南风","power":"1级","aqi":"186"},"future":[{"date":"2020-11-11","temperature":"4/16℃","weather":"晴转多云","wid":{"day":"00","night":"01"},"direct":"南风转北风"},{"date":"2020-11-12","temperature":"3/19℃","weather":"","wid":{"day":"00","night":"00"},"direct":"北风"},{"date":"2020-11-13","temperature":"3/15℃","weather":"晴转多云","wid":{"day":"00","night":"01"},"direct":"东南风转南风"},{"date":"2020-11-14","temperature":"5/14℃","weather":"多云","wid":{"day":"01","night":"01"},"direct":"南风转北风"},{"date":"2020-11-15","temperature":"6/15℃","weather":"多云转小雨","wid":{"day":"01","night":"07"},"direct":"北风转东风"}]},"error_code":0} test_01_3___广州____331eab8f3481f37868378fcdc76cb7c____错误的请求KEY__ (__main__.Test) ... ok {"resultcode":"101","reason":"错误的请求KEY","result":null,"error_code":10001} ---------------------------------------------------------------------- Ran 3 tests in 0.414s OK

    完整代码

    import xlrd
    import unittest
    import ddt
    import requests
    
    def get_data(file_name):
        aa = []
        book = xlrd.open_workbook(file_name)
        sheet = book.sheet_by_index(0)
        for i in range(1, sheet.nrows):
            aa.append(list(sheet.row_values(i, 0, sheet.ncols)))
        return aa
    result = get_data('123.xlsx')
    @ddt.ddt
    class Test(unittest.TestCase):
        # 封装接口
        def select(self,city,key):
            url = 'http://apis.juhe.cn/simpleWeather/query'
            data = {
                "city":city,
                "key":key
            }
            r = requests.post(url,data=data)
            return r
    
        @ddt.data(*result)
        @ddt.unpack
        # 进行参数化
        def test_01(self,city,key,cake):
            result = self.select(city,key)
            print(result.text)
            self.assertIn(cake,result.text)
    
    if __name__ == '__main__':
        # 通过verbosity=2 查看详细内容
        unittest.main(verbosity=2)

    本篇主要用到了python读取Excel内容以及ddt的使用方法,学习了这个我们也可以举一反三,通过读取数据库内容,然后在通过ddt的形式进行参数化。

    如果安静写的对您有帮助,点个关注,持续更新~~有什么不懂的或者写错的地方可以在下方进行评论留言,安静看到后第一时间进行回复。

  • 相关阅读:
    Chrome控制台JS设置xpath定位
    logging.exception
    python去除换行和空格
    从剪切板获取的内容无法使用type函数得到数据类型
    python获取剪切板的内容
    hdoj Radar Installation
    hdoj- Windows Message Queue
    hdoj-看病要排队
    hdoj-1896 stones
    评委会打分
  • 原文地址:https://www.cnblogs.com/qican/p/13959243.html
Copyright © 2020-2023  润新知