python进阶课

unittest框架配置使用

2019-04-27  本文已影响110人  千鸟月读

版本
HtmlTestRunner安装方法

实际操作

Pycharm环境下使用

import unittest
import requests
from requests import exceptions
from HTMLTestReportCN import HTMLTestRunner #1.导入第三方报表库
import sys

#2.继承unittest.TestCase类  --》同时 继承了其断言和setUpClass、setUp、tearDownClass、tearDown

class MyTest(unittest.TestCase):

    # 3.此方法是测试用例执行前调用,初始化,例如连接数据库、登录网址保持session
    # 同时还有setUp()方法,二者区别是前者是所有用例开始前初始化一次,后者是每个test都会初始化一次
    @classmethod
    def setUpClass(cls):
        print("excute")

    def test_Get(self): #4.测试get发送数据到网址是否成功,返回的数据是包含发送的数据则成功
        url = "http://httpbin.org/get"
        formdata = {
            "user": "yu",
            "method": "get"
        }
        try:
            res = requests.get(url, params=formdata) #这里用params 不要用data
            res.encoding = res.apparent_encoding
            if res.status_code == 200:
                resp = res.json()# 返回的是字典 若使用res.text需要用json.loads()转成字典
        except exceptions.RequestException as e:
            raise "error %s" % e
            sys.exit(1)
        self.assertIn("user",  list(resp["args"].keys()), msg="user没有返回,实际返回的是{}".format(resp))#断言1
        self.assertIn("method", list(resp["args"].keys()), msg="user没有返回,实际返回的是{}".format(resp))#断言2

    def test_Post(self):#5.测试post发送数据到网址是否成功,返回的数据是包含发送的数据则成功
        url = "http://httpbin.org/post"
        formdata = {
            "USER": "YU",
            "METHOD": "GET"
        }
        try:
            res = requests.post(url, params=formdata) # params和data
            res.encoding = res.apparent_encoding
            if res.status_code == 200:
                resp = res.json()# 返回的是字典 若使用res.text需要用json.loads()转成字典
        except exceptions.RequestException as e:
            raise "error %s" % e
            sys.exit(1)
        self.assertIn("USER",  list(resp["args"].keys()), msg="user没有返回,实际返回的是{}".format(resp))#断言1
        self.assertIn("METHOD", list(resp["args"].keys()), msg="user没有返回,实际返回的是{}".format(resp))#断言2

    # 6.此方法是测试用用例结束清理环境,例如退出连接数据库、退出登录网址保持session
    # 同时还有tearDown()方法,二者区别是前者是所有用例结束时清理一次,后者是每个test都会清理一次

    def test_Equal(self):
        self.assertEqual(3, 1+1, msg="1+1=3?")

    @classmethod
    def tearDownClass(cls):
        print("test over")

if __name__ == "__main__":
    unittest.main(verbosity=2) #在unittest.main()中加 verbosity 参数可以控制输出的错误报告的详细程度,默认是 1,如果设为 0,则不输出每一用例的执行结果,即没有上面的结果中的第1行;如果设为 2,则输出详细的执行结果,如下:
if __name__ == "__main__":
 print("执行了if————namme")
 # unittest.main(verbosity=2) #使用套件不要用这执行
 f = open("F:\\pythonFiles\\UnittestTry\\API\\report.html", "wb")
 suit = unittest.TestSuite()#测试套件 一个组的测试用例
 suit.addTest(MyTest("test_Get"))
 suit.addTest(MyTest("test_Post"))
 suit.addTest(MyTest("test_Equal"))
 runner = HTMLTestRunner(stream=f, title="test",description="第一个报表")
 runner.run(suit)
 f.close()

其他扩展或注意事项

上一篇 下一篇

猜你喜欢

热点阅读