def setUpClass(cls): '''登录获取token,用户id''' cls.excel.wb = openpyxl.load_workbook(cls.excel.path) # 重新载入workbook params = config.get("PRESET", "loan_params") respone = com_request(TestUpdate, "login", params=params) cls.token = "Bearer" + " " + jsonpath(respone, "$..token")[0] cls.member_id = jsonpath(respone, "$..id")[0]
def env_projects_create(): '''生成一项目,将项目信息写入conf.ini文件''' try: # -------------------登录普通账户获取token---------------------------------------------- params = config.get("PRESET", "unadmin_params") respone = com_request(env_projects_create, "login", params=params) token = "JWT" + " " + respone.json()["token"] # -------------------创建项目---------------------------------------------- params = { "name": "*name new 5 en*", "leader": "孙忘", "tester": "孙忘", "programmer": "孙忘", "publish_app": "自动化分析工具", "desc": "时序自动化" } respone = com_request(env_projects_create, "projects", params=params, token=token) if respone.status_code == 201: config_write("PRESET", "projects", str(respone.json())) else: raise ValueError except Exception as e: raise ValueError
def creat_driver(): '''根据配置文件设置 生成浏览器驱动''' browse = config.get("RUN", "browse") # 获取浏览器名 driver_path = config.get("RUN", "drive_path") # 获取驱动路径 # 根据浏览器生成驱动 if browse.lower() == 'chrome': options = webdriver.ChromeOptions() if config.getboolean("RUN", "headless"): options.add_argument("headless") # 无头模式 options.add_argument('--disable-gpu') # 禁用GPU options.add_argument('--no-sandbox') # 非沙箱环境 driver = webdriver.Chrome(executable_path=driver_path, options=options) # 生成驱动 elif browse.lower() == 'edge': driver = webdriver.Edge(executable_path=driver_path) # 生成驱动 return driver
def com_request(cls, api, **kwargs): '''通用请求方式''' # -------------------请求接口---------------------------- api_url = config.get("URL", "url") + params_get(config.get("URL", api + "_url"), cls, 1) # 登录接口请求地址 # -------------------请求参数---------------------------- params = params_get(str(kwargs["params"]).replace("\n", ""), cls) # 参数处理 setattr(cls, "params", params) method = config.get("METHOD", api + "_method") # -------------------请求头---------------------------- headers={} if "token" in kwargs.keys(): headers["Authorization"] = kwargs["token"] # -------------------请求响应---------------------------- respone = requests.request(method, api_url, json=params, headers=headers) # 请求 return respone
class TestWithdraw(unittest.TestCase): '''提现接口测试''' Worksheet_name = "withdraw" excel, data_list = com_excel_read(Worksheet_name) leave_amount_max = config.get("PRESET", "leave_amount_max") # 获取提取上限 @classmethod def setUpClass(cls): '''登录获取token,用户id''' cls.excel.wb = openpyxl.load_workbook(cls.excel.path) # 重新载入workbook params = config.get("PRESET", "loan_params") respone = com_request(TestWithdraw, "login", params=params) cls.token = "Bearer" + " " + jsonpath(respone, "$..token")[0] cls.member_id = jsonpath(respone, "$..id")[0] def setUp(self): pass @ddt.data(*data_list) @ddt.unpack def test_case(self, info, **kwargs): '''{info}''' try: if kwargs["sql_cheack"]: # 存在sql校验,获取初期余额 res = mysql.sql_read(kwargs["sql_cheack"], self.member_id) amount_prime = res["leave_amount"] respone = com_request(TestWithdraw, self.Worksheet_name, **kwargs, token=self.token) if kwargs["sql_cheack"]: # 存在sql校验,获取提现后余额 res = mysql.sql_read(kwargs["sql_cheack"], self.member_id) amount_new = res["leave_amount"] amount = amount_prime - amount_new print(f"实际{info[:2]}:", float(amount)) print(f"预期{info[:2]}:", float(self.params["amount"])) self.assertEqual(float(amount), float(self.params["amount"])) # 校验提现的余额实际与预期 com_assertEqual(self, respone, eval(kwargs["expect"])) except AssertionError as e: print(e) log.error(f"用例--{info}--执行失败", exc_info=True) self.excel.excel_write(self.Worksheet_name, kwargs["id"], "失败") raise e else: log.info(f"用例--{info}--执行成功", exc_info=False) self.excel.excel_write(self.Worksheet_name, kwargs["id"], "成功") def tearDown(self): pass @classmethod def tearDownClass(cls): cls.excel.wb.save(cls.excel.path) cls.excel.wb.close()
def member_id_get(mark, cls): '''替换*member参数''' if "exist" in mark: member_id = getattr(cls, mark[0]) elif "new" in mark: while True: sql = "select id from futureloan.member where 1 order by rand() limit 10;" # 截取一个已注册id res = mysql.sql_read(sql) if int(res["id"]) != int(getattr(cls, mark[0])): member_id = res["id"] break elif "nuexist" in mark: sql = "select max(id) from futureloan.member;" # 截取一个未注册id res = mysql.sql_read(sql) member_id = res["max(id)"] + 1 elif "unadmin" in mark: member_id = eval(config.get("SETUPDATA", "params"))["mobile_phone"] elif "admin" in mark: member_id = eval(config.get("SETUPDATA", "admin_params"))["mobile_phone"] return member_id
def env_params_recharge(amount, times): # ---------------------普通账户登录-------------------------------- params = config.get("PRESET", "loan_params") respone = com_request(env_params_regist, "login", params=params) token = "Bearer" + " " + jsonpath(respone, "$..token")[0] # ---------------------普通账户充值-------------------------------- params = {"member_id": jsonpath(respone, "$..id")[0], "amount": amount} for i in range(times): respone = com_request(env_params_add_audit, "recharge", params=params, token=token)
def inverst_setup_class(): '''投资测试类用例前后置''' # 生成驱动 driver = creat_driver() driver.maximize_window() driver.implicitly_wait(20) # 登录 loginpage = LoginPage(driver) loginpage.fresh() loginpage.login(config.get("PRESENT", "phone"), config.get("PRESENT", "pwd")) # 主页进入抢投标 homepage = HomePage(driver) homepage.inverst() # 投标页面 url = homepage.get_url() inverstpage = InverstPage(driver) # 用户页面 userpage = UserPage(driver) yield inverstpage, url, userpage # 分割前后置的 yeild之前是前置方法,yeild之后是后置 inverstpage.quit_driver()
def phone_create(mark): '''替换*phone参数''' if "new" in mark: while True: phone = "156{:0<8}".format(random.randint(0, 99999999)) # 创建新号码 sql = "select mobile_phone from futureloan.member where mobile_phone=%s;" res = mysql.sql_read(sql, phone) # 执行sql语句 if not res: # 返回结果未None表示无该手机号码 break elif "exist" in mark: phone = eval(config.get("PRESET", "loan_params"))["mobile_phone"] # 提取一个已注册手机 return phone
def projects_interfaces_get(params_list, cls=None): if params_list[0] == "projects": database_name = "tb_projects" elif params_list[0] == "interfaces": database_name = "tb_interfaces" if "id" in params_list: if "exist" in params_list: id = eval(config.get("PRESET", params_list[0]))["id"] elif "new" in params_list: sql = f"SELECT max(id) FROM test.{database_name};" res = mysql.sql_read(sql) id = int(res["max(id)"]) + 100 return id
def env_params_add_audit(): '''预置投资项目100000000''' # ---------------------借款账户登录-------------------------------- params = config.get("PRESET", "invest_params") respone = com_request(env_params_regist, "login", params=params) token = "Bearer" + " " + jsonpath(respone, "$..token")[0] # ---------------------普通账户添加项目-------------------------------- params = { "member_id": jsonpath(respone, "$..id")[0], "title": "预置投资项目100000000", "amount": 100000000, "loan_rate": 1, "loan_term": 1, "loan_date_type": 1, "bidding_days": 1 } respone = com_request(env_params_add_audit, "add", params=params, token=token) loan_id = jsonpath(respone, "$..id")[0] # ---------------------管理账户登录-------------------------------- params = config.get("PRESET", "admin_params") respone = com_request(env_params_add_audit, "login", params=params) token = "Bearer" + " " + jsonpath(respone, "$..token")[0] # ---------------------管理账户审核-------------------------------- params = {"loan_id": loan_id, "approved_or_not": True} respone = com_request(env_params_add_audit, "audit", params=params, token=token) assert respone["code"] == 0 config_write("SETUPDATA", "audit_loan", { "loan_id": loan_id, "amount": 100000000 })
def username_get(params_list, cls=None): if "new" in params_list: while True: username = data_create("str", params_list[2]) sql = "SELECT count(username) FROM test.auth_user WHERE username=%s;" res = mysql.sql_read(sql, username) if res["count(username)"] == 0: break elif "unadmin" in params_list: username = eval(config.get("PRESET", "unadmin_params"))["username"] elif "exist" in params_list: sql = "SELECT username FROM test.auth_user WHERE 1 ORBDER BY rand() LIMIT 1;" res = mysql.sql_read(sql) username = res["username"] return username
def env_testcases_create(): '''生成一接口,将接口信息写入conf.ini文件''' try: # -------------------登录普通账户获取token---------------------------------------------- params = config.get("PRESET", "unadmin_params") respone = com_request(env_projects_create, "login", params=params) token = "JWT" + " " + respone.json()["token"] # -------------------创建接口---------------------------------------------- params = { "name": "*tcname new 200 ec*", "tester": "孙忘", "project_id": "*projects id exist*", "desc": "时序自动化" } respone = com_request(env_testcases_create, "interfaces", params=params, token=token) if respone.status_code == 201: config_write("PRESET", "interfaces", str(respone.json())) else: raise ValueError except Exception as e: raise ValueError
def fresh(self, url=""): '''刷新网页''' BasePage.fresh(config.get("URL", "home_url"))
def fresh(self): '''刷新网页''' super().fresh( config.get("URL", "base_url") + config.get("URL", "login_url"))
def com_excel_read(sheetname): workbook_name = config.get("EXCEL", "workbook_name") # 工作簿名 excel = ExcelOperate(workbook_name) # 打开excel data_list = excel.excel_read(sheetname) # 获取数据 return excel, data_list
self.con = pymysql.connect(host=host, port=port, user=user, password=password, charset=charset) self.cur = self.con.cursor(pymysql.cursors.DictCursor) def sql_read(self, sql, params="", mode="one"): if params == "": mysql.cur.execute(sql) else: mysql.cur.execute(sql, params) if mode == "one": res = self.cur.fetchone() else: res = self.cur.fetchall() self.con.commit() return res mysql = Mysql(host=config.get("DB1", "url"), port=config.getint("DB1", "port"), user=config.get("DB1", "user"), password=config.get("DB1", "pwd"), charset=config.get("DB1", "charset")) if __name__ == "__main__": sql = "select reg_name, mobile_phone from futureloan where mobile_phone like '156%'" res = mysql.sql_read(sql) print(res)
def __init__(self): self.invest = ("XPATH", r'//span[text()=%s]/ancestor::div[2]//a[text()="抢投标"]' % config.get("PRESENT", "inverst_name")) # 抢投标 self.islogin = ("XPATH", f"//a[text()=%s]") # 登录用户显示 self.quit = ("XPATH", r'//a[text()="退出"]') # 退出登录
from com_func.getpath import testpath from com_func.confread import config from com_func.sql_request import mysql from com_func.env_func import env_params_init import unittest import unittestreport import os # 测试套件 test_suit = unittest.TestSuite() # 测试加载器 test_loder = unittest.TestLoader() # 加载加载器 test_suit.addTest(test_loder.discover(testpath.TEST_CASE_DIR_PATH)) # 预置环境账号 env_params_init() if __name__ == "__main__": test_run = unittestreport.TestRunner(test_suit, tester="孙忘", desc="孙忘产生的测试报告", filename=os.path.join( testpath.REPORT_DIR_PATH, config.get("FILE_NAME", "report"))) test_run.run() test_run.send_email("smtp.qq.com", 465, "*****@*****.**", "bhcppjhdtmuhbfbe", "*****@*****.**", True) mysql.con.close()