Ejemplo n.º 1
0
 def __init__(self):
     """
     如果你后面需要用到这个变量你就加self,否则不需要加
     """
     # 建立数据库连接
     self.conn = pymysql.connect(
         host=do_yuml.read_yuml('mysql', 'host'),  # mysql服务器ip或者域名
         user=do_yuml.read_yuml('mysql', 'user'),  # 数据库连接的用户名
         password=do_yuml.read_yuml('mysql', 'password'),  # 数据库连接密码
         db=do_yuml.read_yuml('mysql', 'db'),  # 数据库名字
         port=do_yuml.read_yuml('mysql', 'port'),  # 连接数据库端口号
         charset='utf8',  # 编码格式
         cursorclass=pymysql.cursors.DictCursor
         # 可以指定cursorclass为DictCursor, 那么返回的结果为字典或者嵌套字典的列表
     )
     # 创建游标对象
     self.curse = self.conn.cursor()
Ejemplo n.º 2
0
def creat_user(reg_name, pwd="12366666", type=1):
    # 创建请求对象
    do_request = HandleRequest()
    # 创建数据库对象
    do_sql = Hadle_Mysql()
    # 添加请求头
    do_request.add_hesders(do_yuml.read_yuml('request', 'version'))
    # 获取url
    url = do_yuml.read_yuml('request', 'url') + '/member/register'
    # 获取数据库userid
    sql = do_yuml.read_yuml('mysql', 'userid')
    while True:
        phone = do_sql.notexist_phone()
        par = {
            "mobile_phone": phone,
            "pwd": pwd,
            "type": type,
            "reg_name": reg_name
        }
        # 调用注册接口发送请求
        do_request.send(url, data=par)

        # 获取用户id
        result = do_sql.run(sql=sql, args=(phone, ))
        if result:
            user_id = result["id"]  # 如果查询的sql数据正确,用户id取值结果中的id
            break

        # 用字典来构造用户信息
    userinfo = {
        reg_name: {
            'id': user_id,
            'reg_name': reg_name,
            'mobile_phone': phone,
            'pwd': pwd
        }
    }

    #关闭连接
    do_request.close()
    do_sql.close()
    return userinfo
Ejemplo n.º 3
0
 def exist_phone(self, phone):
     """
     判断手机号是否被注册了
     :param phone:
     :return:
     """
     sql = do_yuml.read_yuml('mysql', 'sql')  # 动态查询手机号
     if self.run(sql, args=[phone]):
         return True
     else:
         return False
Ejemplo n.º 4
0
 def __init__(self, sheet, filename=None):  # 初始化
     """
     对传入的文件进行判端,如果不传文件名,默认读取我定义的文件
     否则使用,你重新定义的新的文件
     :param sheet:
     :param filename:
     """
     if filename is None:
         self.filename = os.path.join(
             Datas_Path, do_yuml.read_yuml('excel', 'case_path'))
     else:
         self.filename = filename
     self.sheet = sheet
Ejemplo n.º 5
0
    def test_invest(self, cases):

        # 第一步:准备数据
        # 获取用例行号
        row = cases.caseid + 1
        # 获取请求参数
        par = Parameterization.parmse_all(cases.datas)
        # 获取url
        invest_url = do_yuml.read_yuml('request', 'url') + cases.url
        # 获取预期结果
        expected = cases.expected
        # 获取标题
        msg = cases.title

        # 第二步:调用投资接口,进行投资
        res = self.request.send(invest_url, method=cases.method, data=par)
        actuall = res.json()
        # 第三步:比对预期与实际结果
        try:
            self.assertEqual(expected, actuall.get('code'), msg=msg)
        except AssertionError as e:
            # 将用例的实际结果写到excel的result这一列中
            self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'),
                                   value=do_yuml.read_yuml('msg', 'fail_result'))

            do_log.error('{},执行测试用例的具体异常为{}'.format(msg, e))
            raise e
        else:

            if 'token_info' in res.text:
                token = actuall['data']['token_info']['token']  # 在获取响应结果的字典数据,从中查找token_info
                new_header = {"Authorization": "Bearer " + token}  # 获取请求的token值
                self.request.add_hesders(new_header)  # 将获取到的token值加更新到请求头中

            # check_sql=cases.check_sql
            # if check_sql:
            #     sql=Parameterization.parmse_all(check_sql)
            #     res_sql=self.do_sql.run(sql)
            #     loan_id=res_sql['id']
            #     setattr(Parameterization,'a',loan_id)


            # # 获取loan_id
            if cases.caseid == 2:
                loan_id = actuall.get('data').get('id')  # 获取响应的json数据中的data,再获取它下面的id
                setattr(Parameterization, 'loan_id', loan_id)  ## 动态创建属性的机制, 来解决接口依赖的问题

            # 将用例的实际结果写到excel的result这一列中
            self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'),
                                   value=do_yuml.read_yuml('msg', 'success_result'))
            do_log.info('{},测试用例执行成功'.format(msg))
        finally:
            # 将响应的结果反写到excel的actall这一列中
            self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'case_result'),
                                   value=res.text)
Ejemplo n.º 6
0
    def test_login(self, cases):
        #第一步:准备工作
        #获取用例行号
        row = cases.caseid + 1
        #获取参数
        par = Parameterization.parmse_all(cases.datas)
        #获取url
        login_url = do_yuml.read_yuml('request', 'url') + cases.url
        #获取预期结果
        expected = json.loads(
            cases.expected,
            encoding='utf8')  #因为用例是json格式的字符串通过loads转换为Python中的字典
        #获取用例标题
        msg = cases.title

        #第二步:调用登录接口发送请求
        res = self.request.send(login_url, method=cases.method, data=par)
        actuall = res.json()

        #第三步:预期与实际进行对比
        try:
            #用例中的多断言对比就是按照顺序,在异常处理中进行多次断言比较
            self.assertEqual(expected['code'], actuall['code'], msg=msg)
            self.assertEqual(expected['msg'], actuall['msg'], msg=msg)
        except AssertionError as e:
            # 将用例的实际结果写到excel的result这一列中
            self.excel.write_excel(han=row,
                                   column=do_yuml.read_yuml('excel', 'result'),
                                   value=do_yuml.read_yuml(
                                       'msg', 'fail_result'))
            do_log.error("{},执行测试的具体的异常为:{}\n".format(msg, e))
            raise e

        else:
            self.excel.write_excel(han=row,
                                   column=do_yuml.read_yuml('excel', 'result'),
                                   value=do_yuml.read_yuml(
                                       'msg', 'success_result'))
            do_log.info('{},执行用例通过'.format(msg))
        finally:
            # 将响应的结果反写到excel的actall这一列中
            self.excel.write_excel(han=row,
                                   column=do_yuml.read_yuml(
                                       'excel', 'case_result'),
                                   value=res.text)
Ejemplo n.º 7
0
    def test_add(self, cases):
        # 第一步:准备数据
        # 获取用例行号
        row = cases.caseid + 1
        # 获取请求参数
        par = Parameterization.parmse_all(cases.datas)
        # 获取url
        add_url = do_yuml.read_yuml('request', 'url') + cases.url
        # 获取预期结果
        expected = cases.expected  # 因为用例是json格式的字符串通过loads转换为Python中的字典
        # 获取标题
        msg = cases.title

        # 第二步:发送加标请求,获取响应结果
        res = self.request.send(add_url, method=cases.method,data=par)
        actuall = res.json()  # 将响应结果转换为json格式的数据

        # 第三步:对比预期与实际结果
        try:
            self.assertEqual(expected, actuall.get('code'), msg=msg)
        except AssertionError as e:
            # 将用例的实际结果写到excel的result这一列中
            self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'),
                                   value=do_yuml.read_yuml('msg', 'fail_result'))

            do_log.error('{},断言的具体异常为{}\n'.format(msg, e))
            raise e
        else:
            if cases.caseid == 2:  # 默认登录接口登录成功
                # 取值登录的token
                token = actuall['data']['token_info']['token']
                # 更新请求头
                new_header = {'Authorization': 'Bearer ' + token}
                # 将更新的请求头加的默认的请求头中,有则更新,无则添加
                self.request.add_hesders(new_header)

            self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'),
                                   value=do_yuml.read_yuml('msg', 'success_result'))
            do_log.info('{},测试用例执行通过'.format(msg))

        finally:
            # 将响应的结果反写到excel的actall这一列中
            self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'case_result'),
                                   value=res.text)
Ejemplo n.º 8
0
    def test_register(self,cases):

    #获取用例的行号
        row=cases.caseid+1
    #获取用例的参数
        par=Parameterization.parmse_all(cases.datas)
    #获取用例的url
        register_url=do_yuml.read_yuml('request','url')+cases.url
    #获取用例的期望结果
        expected=cases.expected
    #获取用例标题
        msg=cases.title

    #第二步:调用请求接口,发送请求,执行注册
        res=self.do_request.send(url=register_url,method=cases.method,data=par,is_json=True)#这里的method=cases.method跟is_json=True因为是默认参数,可以省略不写
        data_json=res.json()#将响应报文转化为json的字典数据

    #第三步:预期与实际结果进行比较
        try:
            # assertEqual第三个参数为用例执行失败之后的提示信息
            # assertEqual第一个参数为期望值, 第二个参数为实际值
            self.assertEqual(expected,data_json['code'],msg=msg)#预期与实际的2个code进行对比
        except AssertionError as e:
            #将用例的实际结果写到excel的result这一列中
            self.excel.write_excel(han=row,
                                   column=do_yuml.read_yuml('excel','result'),
                                   value=do_yuml.read_yuml('msg','fail_result'))
            do_log.error("{},执行测试的具体的异常为:{}\n".format(msg,e))
            raise e
        else:
            # 将用例的实际结果写到excel的result这一列中
            self.excel.write_excel(han=row,
                                   column=do_yuml.read_yuml('excel', 'result'),
                                   value=do_yuml.read_yuml('msg', 'success_result'))
            do_log.info('{},执行用例通过'.format(msg))
        finally:
            # 将响应的结果反写到excel的actall这一列中
            self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'case_result'), value=res.text)
Ejemplo n.º 9
0
 def create_logger(cls):
     # 创建日志收集器
     mylog = logging.getLogger(do_yuml.read_yuml('log','logname'))
     # 获取日志等级
     mylog.setLevel(do_yuml.read_yuml('log','log_Level'))
     # 设置日志输出格式
     format = logging.Formatter(do_yuml.read_yuml('log','log_format'))
     # 创建一个输出导控制台的日志输出渠道
     sh = logging.StreamHandler()
     sh.setLevel(do_yuml.read_yuml("log", "Steram_Level"))
     # 设置输出导控制台的格式
     sh.setFormatter(format)
     # 将输出渠道添加到日志收集器中
     mylog.addHandler(sh)
     # 创建一个输出导文件的渠道
     fh = logging.FileHandler(filename=os.path.join(Logs_Path,do_yuml.read_yuml('log','log_Filename')),
                              encoding='utf8')
     # 设置日志的输出等级
     fh.setLevel(do_yuml.read_yuml('log','FilenameLevel'))
     # 设置输出到文件的日志格式
     fh.setFormatter(format)
     # 将输出渠道加到日志收集器中
     mylog.addHandler(fh)
     return mylog
Ejemplo n.º 10
0
 def setUpClass(cls):
     cls.request = HandleRequest()
     cls.request.add_hesders(do_yuml.read_yuml('request', 'version'))
Ejemplo n.º 11
0
    def test_rechargd(self, cases):
        ##第一步:准备工作
        #获取用例行号
        row = cases.caseid + 1
        #获取参数
        par = Parameterization.parmse_all(cases.datas)
        #获取url
        rechargd_url = do_yuml.read_yuml('request', 'url') + cases.url
        #获取预期结果
        expected = cases.expected
        #获取用例标题
        msg = cases.title
        check_sql = cases.check_sql  # 取出check_sql
        if check_sql:  # 如果check_sql不为空, 则代表当前用例需要进行数据校验
            check_sql = Parameterization.parmse_all(
                check_sql)  # 将check_sql进行参数化,根据sql查找数据库充值前的金额
            mysql_data = self.do_sql.run(check_sql)  # 执行sql
            amount_before = float(
                mysql_data['leave_amount'])  # 不是float类型, 也不是int类型, 是decimal类型
            # 由于使用float转化之后的数, 有可能小数位数超过2位, 需要使用round保留2位小数
            amount_before = round(amount_before, 2)


#第二步:调用充值接口发送请求
        res = self.request.send(rechargd_url, method=cases.method, data=par)
        actuall = res.json()

        #第三步:预期与实际进行对比
        try:
            #用例中的多断言对比就是按照顺序,在异常处理中进行多次断言比较
            self.assertEqual(expected, actuall['code'], msg=msg)
            if check_sql:
                check_sql = Parameterization.parmse_all(
                    check_sql)  # 前面的断言成功,获取充值后的金额
                mysql_data = self.do_sql.run(check_sql)  # 执行sql
                amount_after = round(float(mysql_data['leave_amount']),
                                     2)  # 不是float类型, 也不是int类型, 是decimal类型
                actual_amount = round(amount_after - amount_before,
                                      2)  #充值后的金额减去充值钱的金额获取差值,保留2位小数进行断言

                one_dict = json.loads(par,
                                      encoding='utf8')  #将json的字符串转化为Python的字典
                recharge_amount = one_dict['amount']  #获取充值的金额
                self.assertEqual(recharge_amount,
                                 actual_amount,
                                 msg="实际充值金额与数据库存储金额不符")
        except AssertionError as e:
            # 将用例的实际结果写到excel的result这一列中
            self.excel.write_excel(han=row,
                                   column=do_yuml.read_yuml('excel', 'result'),
                                   value=do_yuml.read_yuml(
                                       'msg', 'fail_result'))
            do_log.error("{},执行测试的具体的异常为:{}\n".format(msg, e))
            raise e

        else:
            # 默认充值接口的第二条测试用例登录成功
            if cases.caseid == 2:
                # 取值登录的token
                token = actuall['data']['token_info']['token']
                # 更新header的请求头
                new_header = {'Authorization': 'Bearer ' + token}
                self.request.add_hesders(new_header)
            # 将用例的实际结果写到excel的result这一列中
            self.excel.write_excel(han=row,
                                   column=do_yuml.read_yuml('excel', 'result'),
                                   value=do_yuml.read_yuml(
                                       'msg', 'success_result'))
            do_log.info('{},执行用例通过'.format(msg))
        finally:
            # 将响应的结果反写到excel的actall这一列中
            self.excel.write_excel(han=row,
                                   column=do_yuml.read_yuml(
                                       'excel', 'case_result'),
                                   value=res.text)
Ejemplo n.º 12
0
 def setUpClass(cls):
     cls.request = HandleRequest()  # 创建请求对象
     cls.request.add_hesders(do_yuml.read_yuml('request', 'version'))  # 读取yaml文件获取请求数据的头更新到默认的请求头中
     cls.do_sql = Hadle_Mysql()  # 创建执行sql的对象
Ejemplo n.º 13
0
        title = [a.value for a in rows[0]]  # 遍历所有行的第一列,并把他的值取出来
        for b in rows[1:]:  # 遍历除了第一行之外的所以内容,放到b中,结果是元祖格式
            # print(b)
            b1 = [c.value for c in b]  # 这个遍历出来的c是一个个的格子,c.value获取格子的值
            b2 = list(zip(title, b1))  # 进行聚合打包,并转化为列表格式
            casedata = CaseDate()
            for d in b2:
                setattr(casedata, d[0], d[1])
            res.append(casedata)
        self.wb.close()  # 关闭工作簿
        return res

    def write_excel(self, han, column, value):  # 把测试结果回写到excel中,不知道行,列,值给他定义一个
        # 打开excel
        self.open_excel()
        # 写入数据,到excel的行中
        self.sh.cell(row=han, column=column, value=value)
        # 保存数据到excel中
        self.wb.save(self.filename)
        # 关闭excel
        self.wb.close()


if __name__ == '__main__':
    # read=ReadExcel('case01.xlsx','register')#创建ReadExcel的对象,并且传参
    filename = os.path.join(Datas_Path,
                            do_yuml.read_yuml('excel', 'case_path'))
    read = ReadExcel(filename, 'invest')
    cases = read.read_excel()  # 用对象来调用类里面的类方法
    print(cases)
Ejemplo n.º 14
0
 def setUpClass(cls):  # 所有用例执行前, 会被调用一次
     cls.do_request = HandleRequest() # 创建MyRequest对象
     cls.do_request.add_hesders(do_yuml.read_yuml('request', 'version'))