Exemple #1
0
class TestLogin(unittest.TestCase):
    """
    描述登录接口的类
    """
    do_excel = DoExcel(contants.case_file)  # 利用.实现上下级,来引入其他目录下的文件
    cases = do_excel.read_data('login')
    req = RequestMethod()  # 实例化Reqeust类的对象

    def setUp(self):
        pass

    @data(*cases)
    def test_login(self, case):

        resp = self.req.request_method(case.method, case.url,
                                       case.data)  # 返回请求结果
        logger.info("case.expected:{}".format(case.expected))
        try:
            self.assertEqual(resp.text, case.expected, "Login Error")
            self.do_excel.write_data('login', case.case_id + 1, resp.text,
                                     'PASS')
            logger.info("第{0}条用例测试结果:PASS".format(case.case_id))
        except AssertionError as e:
            self.do_excel.write_data('login', case.case_id + 1, resp.text,
                                     'FAIL')
            logger.error("第{0}条用例测试结果:FAIL".format(case.case_id))
            raise e

    def tearDown(self):
        pass
Exemple #2
0
def test_case(id, url, method, data, expect_result):
    log.info(f"编号:{id},请求url:{url},方法:{method},数据:{data},期望结果:{expect_result}")
    data = json.loads(data)
    res = RequestMethod.do_request(url, method, data)
    res_json = res.json()
    try:
        assert res_json == json.loads(expect_result)
        log.info(f"编号:{id}运行通过")
    except AssertionError:
        log.info(f"编号:{id}运行失败", exc_info=True)
        raise AssertionError
Exemple #3
0
class TestApi(unittest.TestCase):
    do_excel = DoExcel(contants.cases_dir)  #do_excel
    cases_login = do_excel.read_excel('login')
    cases_register = do_excel.read_excel('register')
    request_1 = RequestMethod()  #request
    mysql = MysqlUtil()  #数据库
    my_logger = logger.get_logger(
        logger_name="TestApi")  #各个模块中的logger_name可设置成一个名字

    def setUp(self):
        pass

    #@unittest.skip("不要运行")#被装饰的方法将不会被执行
    @data(*cases_login)  #登录接口测试
    def test_login(self, case):
        self.my_logger.info("开始执行第{}条登录用例".format(case.case_id))
        resp = self.request_1.request_method(case.method, case.url, case.data)
        try:
            self.assertEqual(case.expectedresult, resp.text)
            self.do_excel.write_back(case.case_id + 1, resp.text, "Pass")
            #问题一:为啥登录的实际结果可以写进Excel,执行结果pass/failed却写不进Excel呢?????????
            self.my_logger.info("第{}条登录用例执行结果:Pass".format(case.case_id))
        except AssertionError as e:
            self.do_excel.write_back(case.case_id + 1, resp.text, "Failed")
            self.my_logger.error("第{}条登录用例执行结果:Failed".format(case.case_id))
            raise e

    def tearDown(self):
        pass

    @unittest.skip("不执行注册用例")
    @data(*cases_register)  #注册接口测试
    def test_register(self, case):
        self.my_logger.info("开始执行第{}条注册用例".format(case.case_id))
        sql = "select max(mobilephone) from future.member"
        max = self.mysql.fetch_one(sql)[
            0]  # 返回结果是元组类型数据,放在此处,执行每一条用例时都会替换新的手机号
        data_dict = json.loads(case.data)  #case.data从Excel取出是字符串格式,需转换为字典
        if data_dict["mobilephone"] == "${register_mobile}":  #手机号参数化
            data_dict["mobilephone"] = int(max) + 1
            print(data_dict["mobilephone"])
        resp = self.request_1.request_method(case.method, case.url, data_dict)
        try:
            self.assertEqual(case.expectedresult, resp.text)
            self.do_excel.write_back(case.case_id + 1, resp.text, "Pass")
            self.my_logger.info("第{}条注册用例执行结果:Pass".format(case.case_id))
        except AssertionError as e:
            self.do_excel.write_back(case.case_id + 1, resp.text, "Failed")
            self.my_logger.error("第{}条注册用例执行结果:Failed".format(case.case_id))
            raise e
Exemple #4
0
    def test_case(self, sheet_name):

        do_excel = DoExcel(contants.case_file)  #利用.实现上下级,来引入其他目录下的文件
        cases = do_excel.read_data(sheet_name)

        req = RequestMethod()  #实例化Reqeust类的对象
        for case in cases:
            resp = req.request_method(case.method, case.url,
                                      case.data)  #返回请求结果
            print("case.expected:{}".format(case.expected))
            if resp.text == case.expected:
                do_excel.write_data('login', case.case_id + 1, resp.text,
                                    'PASS')
            else:
                do_excel.write_data('login', case.case_id + 1, resp.text,
                                    'FAIL')
Exemple #5
0
class TestRegister(unittest.TestCase):
    """
    描述登录接口的类
    """
    do_excel = DoExcel(contants.case_file)  # 利用.实现上下级,来引入其他目录下的文件
    cases = do_excel.read_data('register')
    req = RequestMethod()  # 实例化Reqeust类的对象

    mysql = MysqlUtil()  #实例化对象
    sql = "select max(mobilephone) from future.member" #sql查询语言
    max = mysql.fetch_one(sql)[0] #调用fetch_one(sql)获取查询结果,结果是元组,用索引取值
    mysql.close()

    def setUp(self):
        # Setup(self)是unittest里的方法,执行一次test_方法这个setup执行一次。
        # 如果是每条用例测试前都想执行一次的操作,可以放在这个方法里
        pass

    @data(*cases)
    def test_register(self,case):
        import json
        case_dict=json.loads(case.data) #json.loads()将传进来的data字符串转化为字典
        if case_dict['mobilephone']=='phonenumber':  #通过字典关键字取值做判断
            case_dict['mobilephone']=int(self.max)-319 #重新给这个注册的号码赋值为数据库中唯一的一个值
            print((int(self.max)-319))
        resp = self.req.request_method(case.method, case.url, case_dict)  # 返回请求结果
        print("case.expected:{}".format(case.expected))
        try:
            self.assertEqual(resp.text,case.expected,"register Error")
            self.do_excel.write_data('register', case.case_id + 1, resp.text, 'PASS')
        except AssertionError as e:
            self.do_excel.write_data('register', case.case_id + 1, resp.text, 'FAIL')
            raise e

    def  tearDown(self):
        pass
Exemple #6
0
 def setUpClass(cls):#继承unittest.TestCase中的方法,并重写
     print("这是一个类方法")
     cls.request = RequestMethod()#实例化放这里,使用session会话方式
     cls.my_logger = logger.get_logger(logger_name="TestRecharge")
Exemple #7
0
    def write_data(self,sheet_name,row,actual,result):
        '''写入数据'''
        sheet=self.wb[sheet_name]
        sheet.cell(row,7).value=actual #写入实际结果
        sheet.cell(row,8).value=result #写入执行结果
        self.wb.save(self.excel_name) #写完数据保存



if __name__ == '__main__':
    from common import contants
    from common.request_method import RequestMethod
    do_excel=DoExcel(contants.case_file)  #利用.实现上下级,来引入其他目录下的文件
    cases=do_excel.read_data('login')
    #print(cases)
    req=RequestMethod()#实例化Reqeust类的对象
    for case in cases:
        resp= req.request_method(case.method,case.url,case.data) #返回请求结果
        print("case.expected:{}".format(case.expected))
        if resp.text==case.expected:
            do_excel.write_data('login',case.case_id+1,resp.text,'PASS')
        else:
            do_excel.write_data('login',case.case_id+1, resp.text, 'FAIL')






Exemple #8
0
            if type(row_case.expectedresult) == int:#将期望结果转换成str类型
                row_case.expectedresult = str(row_case.expectedresult)
            cases.append(row_case) #将每一个对象都追加到列表中
        return cases

    def write_back(self,row,actualresult,result):
        sheet =self.wb[self.sheet_name]
        sheet.cell(row,8).value=actualresult
        sheet.cell(row,9).value=result
        self.wb.save(self.file_name)

if __name__=='__main__':
    from common.request_method import RequestMethod
    from common import contants
    import json
    # 注意路径:此处使用的常量文件,另一种使用上级.查找'../datas/cases.xlsx'
    do_excel=DoExcel(contants.cases_dir)
    cases=do_excel.read_excel('register')
    request_1=RequestMethod()
    for case in cases:
        #case.data=eval(case.data) 这一步尽量放在ruqest_method中进行判断
        resp=request_1.request_method(case.method,case.url,case.data)
        if resp.text==case.expectedresult:
            do_excel.write_back(case.case_id+1,resp.text,"Pass")
        else:
            do_excel.write_back(case.case_id+1,resp.text,"Failed")



    # print("case列表:",cases.read_excel())
    # print("用例条数:",len(cases.read_excel()))
Exemple #9
0
 def setUpClass(cls):
     # setUpClass(cls)是unittest里的类方法,一个类执行一次。如果是测试类前都想执行一次的操作,可以放在这个方法里,
     cls.req = RequestMethod()  # 实例化Reqeust类的对象
     cls.mysql = MysqlUtil()  #实例化MysqlUtil类对象