目录
参数替换==》发送请求==》响应结果处理==》接口断言==》响应参数提取设置成属性==》数据库断言
编写unittest接口自动化框架,按照以下思路和步骤去考虑:
整体思路:分层设计
参数替换==》发送请求==》响应结果处理==》接口断言==》响应参数提取设置成属性==》数据库断言
分层设计:
1、API:存放单个接口
2、data:存放Excel,表格中写好测试用例
3、cases:存放测试用例文件
4、conf:存放setting.py配置文件,配置各种账号密码等配置数据
5、report:存放测试报告
6、logs:存放日志
7、tools:存放各种工具类,对数据进行处理
8、main.py:框架执行入口
9、start.py:如果需要一次性执行多个Excel_sheet中的测试用例,那么先需要进行数据隔离,可以在这个文件中进行封装执行,那么不需要第8步了
#为了让每一步都顺利进行,需要封装很多个方法来实现,以下为详细思路
详细思路与步骤
一:API接口——写框架之后,首先要跑通单个接口,这个可以先写简单的测试用例脚本跑通接口
二:EXCEL测试用例——提取每个接口的url,method,data等数据,在excel表格中填写每个接口的相关数据,在URL或者data中有需要替换的参数时,可以用符号标记出来,(例如#key#),方便过后用正侧表达式提取和替换参数
三:提取封装excel数据——封装一个类,专门用于提取excel数据,让方法返回数据为cases_list格式,组合标题case_title与用例数据case_data,常用方法便利表格数据后dict(zip(case_title,casa_data))(比如返回格式:[“,…]
三:替换参数——封装一个类,用于替换参数,很多接口,需要替换data里面的参数,甚至url地址也会需要替换参数,比如第二步中,标题需要替换的参数#key#;
1、先写一个方法去掉excel表格提取数据中的空格和换行符,可以用data.replace()
2、写一个方法,专用用于提取需要替换的key,返回key_list
3、写一个方法,对于不用来源的key进行属性设置(全局变量设置,此时需要单独在一个py文件中写一个属性的类型)
4、写一个方法,专门用来替换key的值(用上一步设置的属性,或者用上一个接口返回的值设置成属性,或者前置sql查询的值设置属性),总之这一步把所有标记的#key#,替换成接口需要的正确的数据,最终返回完整的替换后的excel数据
四、发送请求——写一个request类,用于接口请求的数据,比如,接口数据类型是否一致,1、接口地址需要替换参数的需要提取处理,2、接口数据不同,需要区别处理的,比如不同的content_type不一样
五、响应数据处理——封装一个类,专门用于响应结果的处理,比如1、各种接口类型返回不一致的问题,可以单独自行返回想要的结果类型,2、进行接口断,3、数据库断言
六、接口返回值提取——封装一个类,专门用于接口返回值的提取,在excel中添加一列extract_dada,提取的数据直接设置成属性
七、封装一个类,用于响应接口断言,在excel表格中,添加一列expected_data,通过期望结果与实际接口返回值的对比
八、封装一个类,用于数据库断言,在excel表格中,添加一列assert_db,通过写出期望结果与数据库SQL查询的实际结果做对比
九、封装一个类,用于连接数据库,关闭数据库,以及sql数据的返回,对于接口值的作用不同,有时候需要返回一个值,有时候需要返回dict类型,可以区别做处理
十、封装一个类,专门用于路径的处理
十一、封装一个类,可以对测试报告进行数据,比如只展示当前的测试报告,历史的报告存放在history目录中
十二、各种方法封装好之后,可以在main.py中统一收集测试用例,执行测试用例,以及生成测试报告,发送测试报告邮件等,该main.py文件为该矿界的执行入口
备注:若测试数据excel有多个sheet,想要一次性执行所有的测试用例,那么先需要进行数据隔离,可以写一个测试用例类生成器(可以使用unittest.defaultTestLoader.loadTestsFromTestCase(cases_class)生成测试套件),通过遍历excel每一个sheet文件,然后传入测试用例类中,循环去执行,不过在执行每一个sheet的测试用例执行,需要写一个属性清除的函数,先清空属性,然后再发送请求(防止多个sheet中有共同的参数)