test_doAudit.py 5.24 KB
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#Python自带模块,直接import就行
import unittest
import json
import urllib3
#自定义的数据库方法,improt的时候需要找到对于模块路径如commons.
import commons.ConfigDB as db
#自定义的API类和方法,improt的时候需要找到对于模块路径如commons.api.
from commons.api.login import login
from commons.api.fieldConfig import fieldConfig
from commons.api.doAudit import doAudit
from commons.api.doAdd import doAdd
#作用为禁用请求安全提示,平时默认加上上面的urllib3语句就行
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
#由于测试的每一个接口都写成了一个类,因此在使用这个接口时,需要实例化后再使用
lo=login()
ad=doAdd()
au=doAudit()
field=fieldConfig()


#登记单审核接口,请求数据是动态的,需要提前准备新的登记单数据,而且需要查询数据库--删除类接口类似
class test_doAudit(unittest.TestCase):
    
    @classmethod
    def setUpClass(cls):
        #获取session
        cls.se=lo.get_session("user01",allow_redirects=False)
        #提前配置新增页的字段配置
        cls.se.post(url=field.url,headers=field.header,json=field.body,proxies={'http': 'http://localhost:8888'})

    def setUp(self):
        #准备数据:新增一条登记单
        self.se.post(url=ad.url,headers=ad.header,json=ad.body,proxies={'http': 'http://localhost:8888'})
        #获取数据:从MYSQL获取新增登记单的id号--因为响应没有id,需要数据库查询
        self.id=db.mysql_selectOne("SELECT id FROM `dili_trace`.register_bill ORDER BY id DESC LIMIT 1")[0]
        
    def test_01_doAudit(self):
        #审核通过--请求url中的需要替换为新增登记单的id
        url=au.url.replace("5888", str(self.id))
        #进行GET请求
        re=self.se.get(url=url,headers=au.header,proxies={'http': 'http://localhost:8888'})
        #打印请求结果(可删除该代码,一般只在调试时使用)
        print(re.json())
        #断言请求过程是否成功
        self.assertEqual(re.status_code, 200)
        #断言响应数据中是否存在期望字符串
        self.assertTrue("'result':'操作成功'" in str(re.json()).replace(" ",""))       

    def test_02_doAudit(self):
        #审核不通过--请求url中的需要替换为新增登记单的id
        url=au.url.replace("5888", str(self.id)).replace("verifyStatus=20", "verifyStatus=30")
        #进行GET请求
        re=self.se.get(url=url,headers=au.header,proxies={'http': 'http://localhost:8888'})
        #打印请求结果(可删除该代码,一般只在调试时使用)
        print(re.json())
        #断言请求过程是否成功
        self.assertEqual(re.status_code, 200)
        #断言响应数据中是否存在期望字符串
        self.assertTrue("'result':'操作成功'" in str(re.json()).replace(" ",""))

    def test_03_doAudit(self):
        #审核不通过--请求url中的需要替换为新增登记单的id
        url=au.url.replace("5888", str(self.id)).replace("verifyStatus=20", "verifyStatus=10")
        #进行GET请求
        re=self.se.get(url=url,headers=au.header,proxies={'http': 'http://localhost:8888'})
        #打印请求结果(可删除该代码,一般只在调试时使用)
        print(re.json())
        #断言请求过程是否成功
        self.assertEqual(re.status_code, 200)
        #断言响应数据中是否存在期望字符串
        self.assertTrue("'result':'操作成功'" in str(re.json()).replace(" ",""))

    def test_04_doAudit(self):
        #审核异常--审核一已审核的登记单ID
        #进行GET请求
        re=self.se.get(url=au.url,headers=au.header,proxies={'http': 'http://localhost:8888'})
        #打印请求结果(可删除该代码,一般只在调试时使用)
        print(re.json())
        #断言请求过程是否成功
        self.assertEqual(re.status_code, 200)
        #断言响应数据中是否存在期望字符串
        self.assertTrue("'result':'操作失败,数据状态已改变'" in str(re.json()).replace(" ",""))

    def tearDown(self):
        pass
           
    @classmethod
    def tearDownClass(cls):
        cls.se.close()



if __name__ == "__main__":
#unittest.main()方法会搜索该模块文件下所有以test开头的测试用例方法,并自动执行它们。
#如果不加下面这个语句,那么在通过unittest的方法添加测试用例时,这个文件里面的用例不会被搜索到。

    unittest.main(verbosity=2)

# #    以下代码可以调试单个测试用例,用例中打印的语句不会展示到控制台,使用前需要注释上面的代码unittest.main(),如果不使用下面代码,
# #    在有unittest.main()的情况下点击ctrl+f11,会直接运行当前页面所有用例,并且把用例用有打印的语句显示到控制台
#     current_suite = unittest.TestSuite()
#     current_suite.addTest(test_doAudit("test_01_doAudit"))
# #     #以列表形式添加多个测试用例
# # #     current_suite.addTests([submitOrder_With_Coupon("test_01"),submitOrder_With_Coupon("test_02")])
# #     # 执行测试
#     runner = unittest.TextTestRunner()
# ##    runner.run(可以直接添加测试用例如submitOrder_With_Coupon("test_01"))
#     runner.run(current_suite)