Exemplo n.º 1
0
    def test_case_audit(self, case):
        """审核接口用例执行的逻辑"""
        #准备测试用例
        url = myconf.get('url', 'url') + case.url  # 拼接完整的URL地址
        row = case.case_id + 1
        # 替换用例参数
        case.data = replace(case.data)

        # 判断是否有*memberId*的参数需要替换
        if "*loan_id*" in case.data:
            max_id = self.db.find_one("select max(id) from loan")[
                0]  # findone()返回的是元组,要加下标才能获取到元素
            loan_id = max_id + 1  # 在数据库中查找到最大的id号,加1后替换给*memberId*
            case.data = case.data.replace("*loan_id*", str(loan_id))

        #发送请求到接口,获取结果
        log.info("正在请求地址{}".format(url))
        response = self.http.request(method=case.method,
                                     url=url,
                                     data=eval(case.data))
        res = response.json()
        print(res)

        #判断是否是执行的加标用例
        if case.interface == "加标":
            loan_id = self.db.find_one(
                "select id from loan where memberId ='{}' order by id desc".
                format(myconf.get("data", "memberId")))[0]
            #"SELECT Id FROM loan WHERE MemberId='{}' ORDER BY id DESC".format(myconf.get('data', 'memberId')))
            # 将添加的标id,保存为临时变量
            setattr(ConText, 'loan_id', loan_id)  #对象(类)属性名 属性值
Exemplo n.º 2
0
	def test_case_login(self,case):
		"""登录接口用例执行的逻辑"""
		#准备测试用例
		url=myconf.get('url',"url")+case.url#字符串连接用+
		#url=case.url
		#data=eval(case.data)
		method=case.method
		excepted=eval(case.excepted)
		row=case.case_id + 1
		# 替换用例参数
		# if "#phone#" in case.data:   #手机号和密码都要替换,这样比较繁琐,封装正则类来替换
		# 	case.data.replace("#phone#",myconf.get("data","phone"))
		data=replace(case.data)
		#发送请求到接口,获取结果
		log.info("正在请求地址{}".format(url))
		response=self.http.request(method=method,url=url,data=eval(data))
		res=response.json()
		#对比预期结果
		#self.assertEqual(excepted,res)
		try:
			self.assertEqual(excepted,res)
		except AssertionError as e:
			"""测试用例未通过"""
			self.excel.write_data(row, 8, '未通过')
			log.debug("{},该条用例执行未通过".format(case.title))
			log.error(e)
			raise e
		else:
			self.excel.write_data(row, 8, '通过')
			log.debug("{},该条用例执行通过".format(case.title))
class WithdrawTestCase(unittest.TestCase):
    """取现接口"""
    excel = ReadExcel(os.path.join(DATA_DIR, "cases1.xlsx"), "withdraw")
    cases = excel.read_data_obj()
    http = HTTPSession()  #类属性
    db = ReadSQL()  #创建db对象

    @data(*cases)
    def test_case_withdraw(self, case):
        """取现接口用例执行的逻辑"""
        #准备测试用例数据
        url = myconf.get('url', "url") + case.url  # 拼接完整的URL地址
        data = eval(case.data)
        method = case.method
        row = case.case_id + 1
        # 替换用例参数
        case.data = replace(case.data)
        if case.check_sql:
            case.check_sql = replace(case.check_sql)
            start_money = ReadSQL().find_one(case.check_sql)[0]
            print('取现之前用户的余额为{}'.format(start_money))
        #发送请求到接口,获取结果
        log.info("正在请求地址{}".format(url))
        response = self.http.request(method=method,
                                     url=url,
                                     data=eval(case.data))
        res = response.json()

        #对比预期结果
        try:
            # 判断是否需要进行SQL校验
            if case.check_sql:  # 如果此字段有数据,条件成立
                # 获取取现用例执行之后的余额
                end_money = self.db.find_one(case.check_sql)[0]
                print('取现之后用户的余额为{}'.format(end_money))

                # 获取本次充值的金额
                money = eval(case.data)['amount']
                money = decimal.Decimal(str(money))
                print('本次取现的金额{}'.format(money))
                # 获取数据库变化的金额
                change_money = start_money - end_money
                self.assertEqual(money, change_money)
            self.assertEqual(str(case.excepted_code), res["code"])
        except AssertionError as e:
            """测试用例未通过"""
            self.excel.write_data(row, 8, '未通过')
            log.info("{},该条用例执行未通过".format(case.title))
            log.exception(e)
            raise e
        else:
            self.excel.write_data(row, 8, '通过')
            log.info("{},该条用例执行通过".format(case.title))
Exemplo n.º 4
0
class AddTestCase(unittest.TestCase):
    """加标接口"""
    excel = ReadExcel(os.path.join(DATA_DIR, "cases1.xlsx"), "add")
    cases = excel.read_data_obj()
    http = HTTPSession()  #类属性
    db = ReadSQL()  #创建db对象

    @data(*cases)
    def test_case_add(self, case):
        """加标接口用例执行的逻辑"""
        #准备测试用例
        url = myconf.get('url', 'url') + case.url  # 拼接完整的URL地址
        row = case.case_id + 1
        # 替换用例参数
        case.data = replace(case.data)
        #判断是否有*memberId*的参数需要替换
        if "*memberId*" in case.data:
            max_id = self.db.find_one("select max(id) from member")[
                0]  #findone()返回的是元组,要加下标才能获取到元素
            memberid = max_id + 1  #在数据库中查找到最大的id号,加1后替换给*memberId*
            case.data = case.data.replace(
                "*memberId*", str(memberid))  #字符串替换的方法,要记得转换类型为str,否则会报错
        #判断是否需要SQL校验
        if case.check_sql:  #如果case文件里的check_sql有数据,就做替换。
            case.check_sql = replace(
                case.check_sql)  #调用封装好的替换类,把其中含有“#memberId#"的替换为从配置文件中获取的值
            # 获取当前用户加标前的标数量
            start_count = self.db.find_count(case.check_sql)

        #发送请求到接口,获取结果
        log.info("正在请求地址{}".format(url))
        response = self.http.request(method=case.method,
                                     url=url,
                                     data=eval(case.data))
        res = response.json()

        #对比预期结果
        try:
            self.assertEqual(str(case.excepted_code), res["code"])
            # 判断是否需要进行SQL校验
            if case.check_sql:
                # 获取当前用户加标后的标数量
                end_count = self.db.find_count(case.check_sql)
                self.assertEqual(1, end_count - start_count)
        except AssertionError as e:
            """测试用例未通过"""
            self.excel.write_data(row, 8, '未通过')
            log.info("{},该条用例执行未通过".format(case.title))
            log.exception(e)
            raise e
        else:
            self.excel.write_data(row, 8, '通过')
            log.info("{},该条用例执行通过".format(case.title))
    def test_case_register(self, case):
        """登注册接口用例执行的逻辑"""
        #准备测试用例
        url = myconf.get('url', 'url') + case.url  # 拼接完整的URL地址
        method = case.method
        excepted = eval(case.excepted)
        row = case.case_id + 1
        # 替换用例参数
        case.data = replace(case.data)
        #随机生成手机号码
        phone = self.random_phone()
        print(phone)
        #替换动态化的参数,字符串替换方法
        case.data = case.data.replace("*phone*",
                                      phone)  #加星号是为了避免替换掉其他的同名字符,如mobilephone
        #发送请求到接口,获取结果
        log.info("正在请求地址{}".format(url))
        response = self.http.request(method=method,
                                     url=url,
                                     data=eval(case.data))
        res = response.json()

        #对比预期结果
        try:
            self.assertEqual(excepted, res)
            # 判断是否需要进行SQL校验
            if case.check_sql:  # 如果此字段有数据,条件成立
                # 用随机生成的手机号替换需要校验的SQL语句中的手机号
                case.check_sql = case.check_sql.replace('*phone*', phone)
                db_res = self.db.find_count(case.check_sql)
                self.assertEqual(1, db_res)
        except AssertionError as e:
            """测试用例未通过"""
            self.excel.write_data(row, 8, '未通过')
            log.info("{},该条用例执行未通过".format(case.title))
            log.exception(e)
            raise e
        else:
            self.excel.write_data(row, 8, '通过')
            log.info("{},该条用例执行通过".format(case.title))
Exemplo n.º 6
0
# -*- coding: utf-8 -*-
# @Time    : 2019/8/31 9:51
# @File    : run_test.py
# @Software: PyCharm
#@author:liu
import unittest
import os
import time
from HTMLTestRunnerNew import HTMLTestRunner
from common.my_logging import log
from common.constant import CASES_DIR,REPORT_DIR
log.info("正在开启测试运行程序")
#创建测试套件
suite=unittest.TestSuite()
#将用例添加到套件中
loader=unittest.TestLoader()
suite.addTest(loader.discover(CASES_DIR))
#now=time.strftime("%Y-%m-%d %H-%M-%S")
#拼接测试报告的路径
#report_file_path=os.path.join(REPORT_DIR,now+"_reports.html")
report_file_path=os.path.join(REPORT_DIR,"reports.html")
#执行测试用例
with open(report_file_path,"wb") as fb:
	runner=HTMLTestRunner(stream=fb,
						  verbosity=2,
						  title="21期接口项目",
						  description="项目实战",
						  tester="graceljh")
	runner.run(suite)
log.info("所有用例执行完毕")