def __init__(self): """初始化方法中,连接到数据库""" # 建立连接 self.conn = pymysql.connect(host=conf.get("mysql", "host"), port=conf.getint("mysql", "port"), user=conf.get("mysql", "user"), password=conf.get("mysql", "password"), charset="utf8", cursorclass=pymysql.cursors.DictCursor) # 创建一个游标对象 self.cur = self.conn.cursor()
def testlogin(cls): # 准备数据 url = conf.get("env", "url") + "/user/login/" data = { "username": conf.get("user_data", "usernamelogin"), "password": conf.get("user_data", "passwordlogin") } response = request(method="post", url=url, json=data) res = response.json() token = "JWT" + " " + jsonpath.jsonpath(res, "$..token")[0] return token
def business_fixture(): # 前置条件 driver = webdriver.Chrome(options=get_option()) driver.implicitly_wait(30) login_page = Login_Page(driver) index_page = Index_Page(driver) add_business = AddBusiness(driver) # 调用登录先去登录 login_page.login(conf.get("user_data", "mobile"), conf.get("user_data", "pwd")) yield index_page, add_business # 后置条件 driver.quit()
def warehouse_fixture(): # 前置条件 driver = webdriver.Chrome(options=get_option()) driver.implicitly_wait(30) login_page = Login_Page(driver) index_page = Index_Page(driver) warehouse_page = WareHouse(driver) # 调用登录先去登录 login_page.login(conf.get("user_data", "mobile"), conf.get("user_data", "pwd")) # 点击仓库管理 index_page.click_warehouse() yield index_page, warehouse_page # 后置条件 driver.quit()
def order_fixture(): # 前置条件 driver = webdriver.Chrome(options=get_option()) driver.implicitly_wait(30) login_page = Login_Page(driver) index_page = Index_Page(driver) order_page = Order_Page(driver) order_search = Order_Search(driver) # 调用登录先去登录 login_page.login(conf.get("user_data", "mobile"), conf.get("user_data", "pwd")) # 点击订单 index_page.click_order() yield index_page, order_page, order_search # 后置条件 driver.quit()
def quotedprice_fixture(): # 前置条件 driver = webdriver.Chrome(options=get_option()) driver.implicitly_wait(30) login_page = Login_Page(driver) index_page = Index_Page(driver) business_page = AddBusiness(driver) quotedprice_page = QuotedPrice(driver) # 调用登录先去登录 login_page.login(conf.get("user_data", "mobile"), conf.get("user_data", "pwd")) # 点击报价模块 index_page.click_quotedprice() yield index_page, business_page, quotedprice_page # 后置条件 driver.quit()
def test_projects(self,case): #准备数据 url=conf.get("env","url")+case["url"] method=case["method"] # 随机生成一个项目名称替换 name=self.random_name() setattr(EnvData,"name",name) data=eval(replace_data(case["data"])) headers = {"Authorization":self.token} excepted=eval(replace_data(case["expected"])) row_id=case["case_id"]+1 #发送请求 response=request(method=method,url=url,json=data,headers=headers) res=response.json() #断言 try: # 调用断言的方法进行断言 assert_dict(excepted,res) # 判断是否需要进行sql校验,如果有sql语句,需要去数据库查询一下是否有一条该项目的数据 if case["check_sql"]: sql = replace_data(case["check_sql"]) res_namecount = self.db.find_count(sql) self.assertEqual(1, res_namecount) except AssertionError as e: self.excel.wirte_excel(row=row_id, column=8, value="不通过") my_log.error("用例{},{},不通过".format(case["case_id"], case["title"])) my_log.debug("预期结果:{}".format(excepted)) my_log.debug("实际结果:{}".format(res)) my_log.exception(e) # exception将捕获到异常记录到日志中(对应的等级是error) # 主动抛出异常 raise e else: self.excel.wirte_excel(row=row_id, column=8, value="通过") my_log.info("用例{},{},通过".format(case["case_id"], case["title"]))
def goods_fixture(): # 前置条件 driver = webdriver.Chrome(options=get_option()) driver.implicitly_wait(20) login_page = Login_Page(driver) index_page = Index_Page(driver) search_page = Good_Search(driver) # 添加物品详情页面 addGoods = AddGoods(driver) # 调用登录先去登录 login_page.login(conf.get("user_data", "mobile"), conf.get("user_data", "pwd")) # 登录完之后点击物品模块 index_page.click_goods() yield addGoods, index_page, search_page # 后置条件 driver.quit()
def collcet_log(): # 1.创建一个日志收集器 mylog = logging.getLogger("dingqin") # 2.设置日志等级 mylog.setLevel(conf.get("log", "level")) # 3.设置输出渠道以及输出渠道的等级(输出到文件) output = logging.FileHandler(log_filepath, encoding="utf8") output.setLevel(conf.get("log", "fh_level")) mylog.addHandler(output) # 输出到控制台 sh = logging.StreamHandler() sh.setLevel(conf.get("log", "sh_level")) mylog.addHandler(sh) # 4.设置输出格式 forms = conf.get("log", "formats") form = logging.Formatter(forms) output.setFormatter(form) sh.setFormatter(form) return mylog
class Login_Page(BasePage): # 首页地址 url = conf.get("env", "base_url") + conf.get("url", "login_url") def __init__(self, driver: Chrome): super().__init__(driver) self.driver.get(self.url) self.driver.maximize_window() def login(self, user, pwd): # 输入账号密码登录 self.input_text(loc.mobile, user, "登录页面_输入账号") self.input_text(loc.pwd, pwd, "登录页面_输入密码") self.click_element(loc.login_btn, "登录页面_点击登录") def login_error_info(self): # 登录失败获取错误提示 time.sleep(1) text = self.get_element_text(loc.login_error_info, "登录页面_登录失败错误提示信息") return text def refresh(self): # 刷新页面 self.driver.refresh()
def replace_data(data): # 替换数据 while re.search("#(.*?)#", data): # 返回一个匹配对象 res=re.search("#(.*?)#",data) # 获取匹配到的数据 key=res.group() # 获取匹配规则中括号里面的内容 item=res.group(1) try: value=conf.get("user_data",item) except: # 去EnvData这个类里面获取对应的属性(环境变量) value = getattr(EnvData, item) data=data.replace(key,value) return data
def test_name_email_exist(self, case): # 准备数据 # 随机生成一个用户名,保存为类属性 username = self.random_username() setattr(EnvData, "username", username) # 随机生成一个email,保存为类属性 email = self.random_email() setattr(EnvData, "email", email) url = conf.get("env", "url") + replace_data(case["url"]) method = case["method"] # 随机生成的用户名去数据库查询,如果能查到count为1.否则为0,然后替换掉expected中的count if case["check_sql"]: sql = replace_data(case["check_sql"]) namecount = self.db.find_count(sql) if namecount == 0: count = 0 setattr(EnvData, "count", str(count)) else: count = 1 setattr(EnvData, "count", str(count)) # 注册成功的预期结果比对了username,这个username是随机生成的,所以设置了动态参数获取 case["expected"] = replace_data(case["expected"]) excepted = eval(case["expected"]) row_id = case["case_id"] + 1 # 发送请求 response = request(method=method, url=url) res = response.json() # 断言 try: # 调用断言的方法进行断言 assert_dict(excepted, res) except AssertionError as e: self.excel.wirte_excel(row=row_id, column=7, value="不通过") my_log.error("用例{},{},不通过".format(case["case_id"], case["title"])) my_log.debug("预期结果:{}".format(excepted)) my_log.debug("实际结果:{}".format(res)) my_log.exception(e) # exception将捕获到异常记录到日志中(对应的等级是error) # 主动抛出异常 raise e else: self.excel.wirte_excel(row=row_id, column=7, value="通过") my_log.info("用例{},{},通过".format(case["case_id"], case["title"]))
def test_register_login(self, case): # 准备数据 url = conf.get("env", "url") + case["url"] method = case["method"] # 随机生成一个用户名和邮箱,保存为类属性 username = self.random_username() email = self.random_email() # 登录成功的用例直接用上一条注册成功的用户名登录,登录成功的那条用例不需要新生成用户名 if case["title"] != "登录成功": setattr(EnvData, "username", username) setattr(EnvData, "email", email) case["data"] = replace_data(case["data"]) data = eval(case["data"]) # 注册成功的预期结果比对了username,这个username是随机生成的,所以设置了动态参数获取 case["expected"] = replace_data(case["expected"]) excepted = eval(case["expected"]) row_id = case["case_id"] + 1 # 发送请求 response = request(method=method, url=url, json=data) res = response.json() # 断言 try: # 调用断言的方法进行断言 assert_dict(excepted, res) # 判断是否需要进行sql校验,如果有sql语句,需要去数据库查询一下是否有一条该用户名的数据 if case["check_sql"]: sql = replace_data(case["check_sql"]) res_namecount = self.db.find_count(sql) self.assertEqual(1, res_namecount) except AssertionError as e: self.excel.wirte_excel(row=row_id, column=8, value="不通过") my_log.error("用例{},{},不通过".format(case["case_id"], case["title"])) my_log.debug("预期结果:{}".format(excepted)) my_log.debug("实际结果:{}".format(res)) my_log.exception(e) # exception将捕获到异常记录到日志中(对应的等级是error) # 主动抛出异常 raise e else: self.excel.wirte_excel(row=row_id, column=8, value="通过") my_log.info("用例{},{},通过".format(case["case_id"], case["title"]))
""" ============================ Author:丁琴 Time: 15:32 E-mail:[email protected] Company:南京瓦丁科技限公司 ============================ """ import logging from common.handle_confing import conf from common.handle_path import LOG_DIR import os log_filepath = os.path.join(LOG_DIR, conf.get("log", "filename")) def collcet_log(): # 1.创建一个日志收集器 mylog = logging.getLogger("dingqin") # 2.设置日志等级 mylog.setLevel(conf.get("log", "level")) # 3.设置输出渠道以及输出渠道的等级(输出到文件) output = logging.FileHandler(log_filepath, encoding="utf8") output.setLevel(conf.get("log", "fh_level")) mylog.addHandler(output) # 输出到控制台 sh = logging.StreamHandler() sh.setLevel(conf.get("log", "sh_level")) mylog.addHandler(sh) # 4.设置输出格式