def read_excel(self, sheet_name, section): try: wb = load_workbook(self.file_name) sheet = wb[sheet_name] Log().info('-----------------------------------------开始读取测试数据-----------------------------------------') except Exception as e: Log().error('---打开用例失败{}'.format(traceback.format_exc())) print(e) data_case = [] final_data = [] case_amount = eval(ReadConfig().cf.get(section, 'case_amount')) # column_name = ['CaseId', 'Module', 'Url', 'Method', 'Description', 'Param', 'ExpectedResult'] # for row in range(2, sheet.max_row+1): # row_data = {} # for col, item in enumerate(column_name): # row_data[item] =sheet.cell(row, col + 1).value # # data_case.append(row_data) # wb.close() # print(data_case) # return data_case # 方法二 for row in range(2, sheet.max_row + 1): # print(row) row_data = {} row_data['CaseId'] = sheet.cell(row, 1).value row_data['Module'] = sheet.cell(row, 2).value row_data['Url'] = sheet.cell(row, 3).value row_data['Method'] = sheet.cell(row, 4).value row_data['Description'] = sheet.cell(row, 5).value # 方法一:在字符串中替换tel,非常麻烦不可取,建议先变成字典然后再字典中转换 # row_data['Param'] = sheet.cell(row, 6).value # if row_data['Param'].find('tel') != -1: # Log().info('查看电话号码') # new_tel = DoExcel(project_path.test_cases_path).read_tel() # row_data['Param'] = eval(row_data['Param'].replace('tel', str(new_tel))) # DoExcel(project_path.test_cases_path).write_tel(new_tel) # else: # row_data['Param'] = eval(row_data['Param']) # 方法二 row_data['Param'] = eval(sheet.cell(row, 6).value) if row_data['Param'].get('mobilephone') == 'tel': row_data['Param']['mobilephone'] = DoExcel(project_path.test_cases_path).read_tel() DoExcel(project_path.test_cases_path).write_tel(DoExcel(project_path.test_cases_path).read_tel()) row_data['ExpectedResult'] = eval(sheet.cell(row, 7).value) data_case.append(row_data) wb.close() # 此处获取配置文件配置用例,0代表执行全部用例 if case_amount == 0: final_data = data_case else: for i in case_amount: final_data.append(data_case[int(i) - 1]) print(len(final_data), final_data) return final_data
def read_excel(self): """read模块把不同sheet页的用例根据配置文件设置全部取出,""" try: wb = load_workbook(self.file_name) Log().info( '-----------------------------------------开始读取测试数据-----------------------------------------' ) except Exception as e: Log().error('---打开用例失败{}'.format(traceback.format_exc())) print(e) final_data = [] case_amount = ReadConfig().case_amount() # column_name = ['CaseId', 'Module', 'Url', 'Method', 'Description', 'Param', 'ExpectedResult'] # for row in range(2, sheet.max_row+1): # row_data = {} # for col, item in enumerate(column_name): # row_data[item] =sheet.cell(row, col + 1).value # # data_case.append(row_data) # wb.close() # print(data_case) # return data_case # 方法二 for key in case_amount: # 取到配置文件{'recharge':0,'Sheet1':[1,3,5]}, data_case = [] sheet = wb[key] # key代表表单名 for row in range(2, sheet.max_row + 1): # print(row) row_data = {} row_data['CaseId'] = sheet.cell(row, 1).value row_data['Module'] = sheet.cell(row, 2).value row_data['Url'] = sheet.cell(row, 3).value row_data['Method'] = sheet.cell(row, 4).value row_data['Description'] = sheet.cell(row, 5).value # 方法二 row_data['Param'] = eval(sheet.cell(row, 6).value) if row_data['Param'].get('mobilephone') == 'tel': row_data['Param']['mobilephone'] = DoExcel( project_path.test_cases_path).read_tel() DoExcel(project_path.test_cases_path).write_tel( DoExcel(project_path.test_cases_path).read_tel()) row_data['Sql'] = eval(sheet.cell(row, 7).value) row_data['ExpectedResult'] = eval(sheet.cell(row, 8).value) data_case.append(row_data) # 此处获取配置文件配置用例,0代表执行全部用例 if case_amount[key] == 0: final_data += data_case else: for i in case_amount[key]: final_data.append(data_case[int(i) - 1]) wb.close() Log.info('测试用例共{}条,分别为:{}'.format(len(final_data), final_data)) Log.info( '--------------------------------------------读取测试数据完毕-----------------------------------------' ) print(len(final_data), final_data) return final_data
def is_login_sucess(self): current_title = self.get_current_title() current_url = self.get_current_url() if ("user/dashboard" or "user/deposit/" ) in current_url and "Online Lottery" in current_title: Log().info("登录成功,当前的地址为:" + current_url) return True Log().error("登录失败,请检查") return False
def read_tel(self): try: wb = load_workbook(self.file_name) sheet = wb['tel'] tel = sheet.cell(1, 2).value Log().info('---读取电话号码{}'.format(tel)) except Exception as e: Log().error('---读取电话号码失败{}'.format(e)) wb.close() return tel
def write_tel(self, old_tel): try: wb = load_workbook(self.file_name) sheet = wb['tel'] except Exception as e: Log().error('---更新电话号码失败{}'.format(e)) new_tel = old_tel + 1 sheet.cell(1, 2).value = new_tel Log().info('---更新电话号码{}'.format(new_tel)) wb.save(self.file_name) wb.close()
def post_main(self, url, data, headers=None): try: if headers != None: res = requests.post(url=url, data=data, headers=headers) else: res = requests.post(url=url, data=data) res_code = res.status_code Log().info("成功发送POST请求,请求结果code为:%s,请求结果字段为:%s" % (res_code, res.json())) return res.json() except Exception as e: Log().error("POST请求出错,出错原因:%s" % e) return {'code': 1, 'result': 'post请求出错,出错原因:%s' % e}
def setUpClass(cls): cls.s = requests.session() copy_excel(globalparam.data_path_name,globalparam.result_path) cls.run_method = Run_Method() cls.logger = Log() cls.logger.info( '############################### START ###############################')
class Test_news(): log = Log() @allure.feature("功能点:添加新闻") @allure.story("用例:用户新添加新闻") @pytest.mark.parametrize("title,author,abstract", testdata["test_add_news_data"], ids=["正常添加"]) # @pytest.mark.skip('跳过该成功用例') def test_add_new(self, login_fixtrue, title, author, abstract): driver = login_fixtrue new = NewsPage(driver) with allure.step("点击进入新闻管理模块"): new.come_news() time.sleep(2) with allure.step("点击进入新增新闻页面"): new.add_news() with allure.step("输入新闻标题"): new.input_title(title) with allure.step("点击自定义作者"): new.click_CustomAuthor() with allure.step("输入自定义作者名"): new.input_author(author) time.sleep(2) with allure.step("选择TMT(一级)频道"): new.input_channel() with allure.step("选择原创类型"): new.input_type() new.select_tpye() time.sleep(7) with allure.step("选择同步首页"): new.select_homePage() with allure.step("填写摘要"): new.input_abstract(abstract) time.sleep(5)
class Test_login(): log = Log() @allure.feature("功能点:用户登录页面") @allure.story("用例:用户登录") @pytest.mark.parametrize("username,password,msg", testdata["test_login_success_data"], ids=["正确用户名密码登录"]) # @pytest.mark.skip('跳过该成功用例') def test_success_login(self, username, password, msg): driver = webdriver.Chrome() web = LoginPage(driver) web.login(user=username, password=password) result = web.is_login_success(expect_text=msg) self.log.info("登录结果:%s" % result) # time.sleep(10) assert result # web.is_quit() @allure.feature("功能点:用户登录页面") @allure.story("用例:用户登录") @pytest.mark.parametrize("username,password,msg", testdata["test_login_fail_data"], ids=["正确用户名错误密码登录", "错误用户名正确密码登录"]) # @pytest.mark.skip('跳过') def test_fail_login(self, username, password, msg): driver = webdriver.Chrome() web = LoginPage(driver) web.login(user=username, password=password) result = web.is_login_fail(expect_text=msg) self.log.info("登录结果:%s" % result) assert result
def send_email(self): new_report = self.get_report() today = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) #发送附件 msg = MIMEMultipart() msg['From'] = self.sender msg['To'] = self.recevier msg['Subject'] = '软件测试情况' # 发送邮件正文内容,三个参数:第一个为文本内容,第二个 html 设置文本格式,第三个 utf-8 设置编码 msg.attach(MIMEText('测试结果', 'plain', 'utf -8')) #将xlsx文件作为内容发送到对方的邮箱读取excel,rb形式读取,对于MIMEText()来说默认的编码形式是base64 ,没有设备会出现乱码 fj = MIMEText(open(new_report, 'rb').read(), 'base64', 'utf -8') fj["Content-Type"] = 'application/octet-stream' fj["Content-Disposition"] = 'attachment; filename="TestResult.xlsx"' msg.attach(fj) try: #发送者smtp服务器 smtp = smtplib.SMTP_SSL() smtp.connect(self.smtp, '465') #发送者邮箱账号和授权码 smtp.login(self.user, self.password) #发件人邮箱账号、收件人邮箱账号、发送邮件 smtp.sendmail(self.sender, self.recevier, msg.as_string()) Log().info('发送成功') smtp.close() except Exception as e: Log.debug('发送邮件失败') raise
def setUpClass(cls): cls.driver = set_options() cls.driver.set_window_size(1920, 1080) cls.login_driver = LoginPage(cls.driver) cls.login_driver.open(login_url) cls.log = Log() cls.find_driver = FindPage(cls.driver)
class Test_login(): log = Log() @allure.story("用例:用户登录") @pytest.mark.parametrize("username,password,msg",testdata["login_success_data"], ids = ["正确用户名密码登录"]) #@pytest.mark.skip('跳过该成功用例') @pytest.mark.run(order=-1)#调整登录成功用例最后运行 def test_success_login(self,open_browser,username,password,msg): driver = open_browser #driver = Base().driver web = LoginPage(driver) web.login(user=username,password=password) with allure.step("获取结果: 获取页面实际结果,判断是否登录成功"): result = web.is_login_success(expect_text=msg) self.log.info("登录结果:%s"%result) with allure.step("断言:判断是否登录成功"): assert result #driver.quit() @allure.story("用例:用户登录") @pytest.mark.parametrize("username,password,msg", testdata["login_fail_data"], ids=["错误用户名正确密码登录"]) # @pytest.mark.skip('跳过') def test_fail_login(self,open_browser,username,password,msg): #driver调用前置无头模式启动 driver = open_browser web = LoginPage(driver) web.login(user=username,password=password) with allure.step("获取结果: 获取页面实际结果,判断是否登录成功"): result = web.is_login_fail(expect_text=msg) self.log.info("登录结果:%s"%result) with allure.step("断言:判断是否登录成功"): assert result
def __init__(self, excel_path, sheet_name="Sheet1"): self.data = xlrd.open_workbook(excel_path) #根据路径打开一个文件 self.table = self.data.sheet_by_name(sheet_name) #根据表名打开表 self.keys = self.table.row_values(0) #获取第一行作为字典的key值 self.rowNum = self.table.nrows #获取总行数 self.colNum = self.table.ncols #获取总列数 self.log = Log('读取Excel').get_logger()
class LoginTest(unittest.TestCase): log = Log() def setUp(self): self.log.info("登录测试开始") def test_login_suc(self): """登入测试用例!!!!""" lg_suc = Login('login_by_account') result = lg_suc.login_service() self.log.info("test_login_suc 登录的status code为:" + str(lg_suc.status_code())) "断言二:登录的国家是否是jp" + str( self.assertEqual(result['info']['countryid'], 'JP')) def test_login_invaild_password(self): """密码错误登录""" lg_invaild_password = Login("login_invaild_password") result = lg_invaild_password.login_service(True) self.log.info("test_login_invaild_password 登录的status code 为:" + str(lg_invaild_password.status_code())) "断言 是否是密码错误的提示:" + str(self.assertIn("password", result)) def test_logout(self): """登出测试用例""" lgout = LogOut("logout") result = lgout.logout_service() self.log.info("test_logout 的status code 为: " + str(lgout.status_code())) "断言: 是否登出:" + str(self.assertEqual(result['CODE'], "1")) def tearDown(self): self.log.info('登录测试结束')
def test_cases(self, case): global test_result url = case['Url'] method = case['Method'] param = case['Param'] case_id = case['CaseId'] module = case['Module'] expected_result = case['ExpectedResult'] Log.info('用例参数为{}'.format(case)) actual_result = HttpRequest().http_request(url, method, param) # 返回 resp Log.info('第{}条{}模块用例,返回结果{}'.format(case_id, module, actual_result.json())) try: self.assertEqual(expected_result, actual_result.json()) test_result = 'Pass' except Exception as e: test_result = 'Fail' Log.error(e) raise e finally: Log().info( '-----------------------------------------开始写回测试结果-----------------------------------------' ) DoExcel(project_path.test_cases_path).write_excel( 'Sheet1', case_id + 1, 8, actual_result.text) DoExcel(project_path.test_cases_path).write_excel( 'Sheet1', case_id + 1, 9, test_result)
def __init__(self, mode=CMD_LINE): self.cid = "" self.mode = mode self.log = Log() self.driver = self.__create_driver() if self.driver is not None: self.driver.set_page_load_timeout(int(Config().get_property("time", "page_load_timeout")))
class Login_in(): log = Log() def __init__(self): self.yaml_data = ReadFile().read_yaml("yaml_path") self.header = self.yaml_data["header"] self.url = self.yaml_data["url"] self.link_url = self.yaml_data["c_login"]["url"] self.login_method = self.yaml_data["c_login"]["method"] self.login_param = self.yaml_data["c_login"]["param"] def c_longin_in(self, mobile): """ 登录 :param mobile: :return: """ try: self.login_param["mobile"] = mobile result = Runmethod.run_main(self.login_method, url, self.login_param, self.header) return result except Exception as e: print("登录报错{}".format(e)) self.log.error("登录报错{}".format(e))
def setUp(self): self.log = Log() self.log.info('loginnull测试开始') case_excle = ReadCase('mltest.xlsx', '工作表1') self.login_url_null = case_excle.get_interface_url('login_null') self.login_data_null = case_excle.get_interface_data('login_null') self.login_headers_null = case_excle.get_intetface_headers('login_null')
def __init__(self, mode=CMD_LINE, progress_bar_var=None, speed_str=None): self.last_per = -1 self.last_block_sec = 0 self.current_block = 0 self.progress = progress_bar_var self.mode = mode self.log = Log() self.speed_str = speed_str
def setUpClass(cls): cls.driver = set_options() cls.driver.set_window_size(1920, 1080) cls.login_driver = LoginPage(cls.driver) cls.login_driver.open(login_url) cls.login_driver.user_login(cls.login_driver, '*****@*****.**', 'ab1234567') cls.find_pwd_driver = PostAnOfferPage(cls.driver) cls.log = Log()
def setUp(self): self.log = Log() self.log.info("测试开始") self.dr = Drive() self.url = "http://www.baidu.com" self.input_name = '百度搜索输入框' self.click_name = '百度一下按钮' self.serach_name = 'haha'
def __init__(self): self.yaml_path = os.path.join( os.path.dirname(os.path.dirname(__file__)), "config/config.yaml") self.mysql_yaml_path = os.path.join( os.path.dirname(os.path.dirname(__file__)), "config/mysql.yaml") self.excel_path = os.path.join( os.path.dirname(os.path.dirname(__file__)), "config/testcase.xls") self.log = Log()
def __init__(self, driver): """ :param driver:打开浏览器驱动 :param base_url:输入测试url :param pagetitle:输入页面title """ self.driver = driver self.logger = Log()
def setUp(self): self.log = Log("BaiduTests") self.driver = webdriver.Firefox() print(11) self.log.info("打开浏览器") print(33) self.driver.implicitly_wait(30) # 隐性等待时间为30秒 self.base_url = "https://www.baidu.com"
def test_002(self): """百度搜索_Appium""" """百度搜索_Python""" try: self.driver.maximize_window() Log().info(" 浏览器窗口最大化") self.driver.implicitly_wait(time_to_wait=5) Log().info(" 设置隐性等待时间为5秒") self.driver.get(url="https://www.baidu.com") Log().info(" 访问百度") self.driver.find_element_by_xpath("//input[@id='kw']").send_keys( "Appium") Log().info(" 搜索输入框输入Python") time.sleep(1) self.driver.find_element_by_xpath("//input[@id='su']").click() Log().info(" 点击百度一下搜索框") time.sleep(1) title = self.driver.title Log().info(" 获得当前页面标题:%s" % title) time.sleep(2) assert "Appium_百度搜索", title except Exception as e: timeStrmap = time.strftime('%Y%m%d_%H_%M_%S') img_name = os.path.join(img_path, "%s.png" % str(timeStrmap)) Log().info(message=" 异常截图保存路径: %s 异常截图名称:%s" % (img_path, os.path.split(img_name)[1])) self.driver.get_screenshot_as_file(img_name) raise
def write_excel(self, sheet_name, row, col, value): try: wb = load_workbook(self.file_name) sheet = wb[sheet_name] sheet.cell(row, col).value = '{}'.format(value) wb.save(self.file_name) wb.close() except Exception as e: Log().error('---写回测试结果失败{}'.format(e))
def setUpClass(cls): cls.driver = set_options() cls.driver.set_window_size(1920, 1080) cls.login_driver = LoginPage(cls.driver) cls.login_driver.open(login_url) cls.login_driver.user_login(cls.login_driver, "*****@*****.**", "ab1234567") cls.my_offers_driver = MyOffersPage(cls.driver) cls.log = Log()
def __init__(self, host=None, port=0, user=None, passwd=None, db=None, charset=None, max_retries_count=None, conn_retries_count=None, conn_timeout=None): con_status = True #定位路径 file = os.path.abspath( os.path.join(os.getcwd(), '..', 'database', 'config')) config = ConfigParser() config.read(file) host = config.get("mysql", 'host') port = config.getint("mysql", 'port') user = config.get("mysql", 'user') passwd = config.get("mysql", 'passwd') db = config.get("mysql", 'db') charset = config.get("mysql", 'charset') max_retries_count = config.getint("mysql", 'max_retries_count') conn_retries_count = config.getint("mysql", 'conn_retries_count') connect_timeout = config.getint("mysql", 'connect_timeout') while con_status and max_retries_count > conn_retries_count: try: #建立连接 self.conn = pymysql.Connect(host=host, port=port, user=user, passwd=passwd, db=db, charset=charset) Log().info('连接成功') # 创建游标 self.cursor = self.conn.cursor() con_status = False except: conn_retries_count += 1 print(conn_retries_count) Log().debug('连接失败') continue
def setUp(self): self.logger = Log() self.logger.info( '##################### START ######################') warnings.simplefilter('ignore', ResourceWarning) driver = init_driver() self.driver = driver self.loginPage = LoginPage(self.driver) self.registerPage = RegisterPage(self.driver) self.settingPage = SettingPage(self.driver)
def __init__(self): self.host = localReadConfig.get_http("baseurl") self.port = localReadConfig.get_http("port") self.timeout = localReadConfig.get_http("timeout") self.logger = Log().get_logger() self.headers = {} self.params = {} self.data = {} self.url = "" self.files = {}