import unittest
import requests
import os, time,sys
from HTMLTestRunner import HTMLTestRunner
from caculate import *
class TestClass(unittest.TestCase):
    @classmethod #类方法:每次运行测试类只执行一次
    def setUpClass(cls):
        print("这是测试整个类前要执行的方法")
    def setUp(self):
        print("这是每一个测试方法前面运行的方法")
    def tearDown(self):
        print("这是每一个测试方法后面运行的方法")
    def test_first(self):
        print("这是测试方法1-进行接口测试demo")
        # 这是利用requests第三方库(进行发请求,收响应)向百度发个get请求
        res = requests.get('http://www.baidu.com')
        # 这是输出返回结果
        print(res.text)
    def test_second(self):
        print("这是测试方法2-研究一下python的断言")
        assert 1 == 1
        assert {'name': 'linda', 'age': 18} == {'name': 'linda', 'age': 188}
        a = 'hello'
        age = 35
        assert a in 'hello world'
        assert 20 < age < 80
        print("这是测试方法2-研究一下unittest的断言")
        self.assertGreater(1, 2, '这是不可能的')
        self.assertIn(a, ' world', msg='没有hello呀')
    def test_third(self):
        print("这是测试方法3-单元测试-测试开发写的计算器的代码功能是否能实现")
        self.assertEqual(3, add(1, 2))
        self.assertNotEqual(3, add(2, 2))
        self.assertEqual(1, minus(3, 2))
        self.assertEqual(6, multi(3, 2))
        self.assertEqual(2, divide(6, 3))
        self.assertEqual(2, divide(5, 2))
    @classmethod
    def tearDownClass(cls):
        print("这是测试整个类后要执行的方法")
if __name__ == '__main__':
    # 设置报告的路径
    report_path = os.path.join(os.path.dirname(__file__), 'report')
    # 通过当前时间命名报告
    now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime())
    filename = report_path + "/" + now + "_result.html"
    # 建立一个套件-就是可以装多个用例
    suite = unittest.TestSuite()
    # 在这个套件中添加测试用例(可能通过类名,模块名等加载,这次用类名)
    suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestClass))
    with open(filename, 'wb') as fp:
        runner = HTMLTestRunner(
            stream=fp,
            title='测试报告',
            description='测试用例')
        runner.run(suite)
#执行测试时不能用unittest模式下执行,需要在命令行模式下执行才能生成测试报告