您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python处理Excel测试用例数据导入到数据库中以及遇到问题总结

bubuko 2022/1/25 19:51:45 python 字数 10371 阅读 977 来源 http://www.bubuko.com/infolist-5-1.html

想要将Excel编写好的接口测试用例都插入数据库表中,于是使用Python来实现对应的操作,具体的思路如下图所示: 实现的方法如下: def import_excel(self): try: case_data_list = [] case_src = open_workbook(config.sr ...

想要将Excel编写好的接口测试用例都插入数据库表中,于是使用Python来实现对应的操作,具体的思路如下图所示:

技术分享图片

实现的方法如下:

    def import_excel(self):

        try:
            case_data_list = []
            case_src = open_workbook(config.src_path + /case/接口测试用例.xls, formatting_info=True)
            case_sheet = case_src.sheet_by_index(1)
            for rows in range(7, case_sheet.nrows):
                case_data = case_sheet.row_values(rows)
                # case_data_list = case_data_list + ‘,‘ + str(case_data)
                # print("输出每一条测试用例的数据:%s" % case_data)
                name_interface = case_data[3]   # 用例名称
                exe_level = int(case_data[0])   # 用例执行等级
                exe_mode = case_data[5]   # 请求方式
                header_interface = ‘‘    # 请求头文件

                if exe_mode == POST or exe_mode == post:     # 如果是post时设置请求头类型
                    header_interface = {\‘content-type\‘:\‘application/x-www-form-urlencoded\‘}

                url_interface = case_data[6]   # 接口地址
                params_interface = case_data[7]   # 接口请求参数
                data_list = case_data[9]    # 返回结果集,接口预期code返回值
                # print(data_list)
                list_response = []

                data_key = self.__recur_params(data_list, list_response)   # 完整性参数,待比较参数集
                code_to_compare = data_key[0]   # 待比较的code参数
                data_code = ast.literal_eval(data_list)    # 将字符类型转为字典类型
                code_expect = data_code[code_to_compare]     # 接口预期code返回值
                # print("输出返回结果中的参数%s" % data_key)

                ‘‘‘
                print(type(name_interface), type(exe_level), type(exe_mode), type(url_interface),
                      type(header_interface), type(params_interface), type(code_to_compare),
                      type(code_expect), type(data_key))
                ‘‘‘

                # 插入测试用例数据到数据库中
                test_db = opmysql.OperationDbInterface()
                insert_list = (name_interface, exe_level, exe_mode, url_interface, header_interface, params_interface,
                                code_to_compare, code_expect, data_key)
                case_data_list.append(tuple(insert_list))

                # print(insert_sql, insert_list)
                # print(insert_list)
            print(case_data_list)
            insert_sql = "INSERT INTO case_interface(`name_interface`,`exe_level`,`exe_mode`,`url_interface`,"                          "`header_interface`,`params_interface`,`result_interface`,`code_to_compare`,"                          "`code_actual`,`code_expect`,`result_code_compare`,`params_to_compare`,`params_actual`,"                          "`result_params_compare`,`case_status`,`create_time`,`update_time`) VALUES "                          "(%s,%s,%s,%s,%s,%s,‘‘,%s,‘‘,%s,NULL,\"%s\",‘[]‘,NULL,1,NOW(),NOW());"
            insert_case = test_db.insert_data(insert_sql, case_data_list)
            print(insert_case[data], insert_case[message])

在编写的过程中遇到的问题记录:

问题1:TypeError: string indices must be integers

技术分享图片

错误原因分析:string indices must be integers 字符串索引必须是整数,再定位到对应的代码语句code_expect = data_code[code_to_compare]中,本来获取时需要的是字典类型,看错误提示说的字符串类型,查看参数对应的类型时,确实是字符类型
解决方法:需要将字符串类型转为字典类型,使用ast库中的literal_eval方法将字符串类型转为字典类型(字符类型转为字典类型还可以使用eval()或json.loads()方法)

data_code = ast.literal_eval(data_list)    # 将字符类型转为字典类型
code_expect = data_code[code_to_compare]     # 接口预期code返回值

问题2:TypeError: expected string or bytes-like object

技术分享图片

错误原因分析:expected string or bytes-like object 需要字符串或类似字节的对象,查看对应的语句排查了好久看不出问题,而排查时数据类型又都正常,list集合中的每个参数的类型也排查过都没问题,最后定位到调用的方法时,刚开始也没发现问题,最后调试时发现传入的参数写反了,第一个参数是插入语句,第二个参数才是插入数据,写反了,导致一直报错

解决办法:将参数调整正确就可以解决问题

问题3:TypeError: not all arguments converted during string formatting

技术分享图片

错误原因分析: not all arguments converted during string formatting不是所有参数都在字符串格式化期间转换,原因是插入语句中每个要插入的数据占位符,与后面插入的数据不对应。根据原因一个个参数进行排查,发现调用对应的函数后将一个元组的数据当成了一个字符串进行传入,导致不对应。

解决办法:将元组加入到列表中,再通过列表的形式传参,调用函数时,对应的占位符与数据能匹配好,能正常操作了,问题解决

问题4:TypeError: not enough arguments for format string

技术分享图片

错误原因分析:not enough arguments for format string 格式字符串的参数不足,查看对应的语句print输出时报错,原因是占位符与后面的参数不对应,后面的参数少了

解决办法:加上对应的参数值就可以解决问题

 

Python处理Excel测试用例数据导入到数据库中以及遇到问题总结

原文:https://www.cnblogs.com/dancy0dante/p/12853676.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶