def test_recharge(self, case): # 第一步:入参和用例数据 url = case.url + case.interface # 获取充值之前的余额 if case.check_sql: start_money = self.db.find_one(case.check_sql)[0] print("充值之前用户的余额是:{}".format(start_money)) # 第二步:发送接口请求 res = self.http.request(case.method, url, data=eval(case.data)).json() # 第三步:校验结果 try: self.assertEqual(str(case.excepted_code), res["code"]) # 获取充值之后的余额 if case.check_sql: end_money = self.db.find_one(case.check_sql)[0] print("充值之后用户的余额是:{}".format(end_money)) self.assertEqual(float(eval(case.data)["amount"]), float(end_money-start_money)) except AssertionError as e: # 用例执行未通过 self.excel.write_data(case.case_id+1, 10, "fail") logger.info("测试数据为:{}".format(case.data)) logger.info("期望结果是:{}".format(case.excepted_code)) logger.info("实际结果是:{}".format(res)) logger.exception(e) raise e else: self.excel.write_data(case.case_id + 1, 10, "pass") logger.info("测试数据为:{}".format(case.data)) logger.info("期望结果是:{}".format(case.excepted_code)) logger.info("实际结果是:{}".format(res))
def test_api(self, args): global COOKIES #声明全局变量 logger.info('正在执行第{0}条用例'.format(args['case_id'])) logger.info('测试参数:{0}'.format(args)) url = uri + args['apiName'] #发起HTTP请求 res = HttpRequests().http_request(url, args['method'], eval(args['param']), COOKIES) logger.info('返回结果:{0}'.format(res.json())) logger.info(type(args['case_id'])) logger.info(COOKIES) #每一个登录请求之后都会产生一个cookies if res.cookies != {}: COOKIES = res.cookies #如果cookies不为空,就对全局变量进行修改 #断言,比对结果 try: self.assertEqual(eval(res.json()['code']), args['expected']) test_result = 'pass' except Exception as e: logger.exception('断言出错啦,期望结果为:{0},实际结果为:{1}'.format( args['expected'], res.json()['code'])) test_result = 'fail' raise e finally: excel_obj.write_back(args['case_id'] + 1, 8, res.text) excel_obj.write_back(args['case_id'] + 1, 9, test_result)
class TestAdd(unittest.TestCase): """加标接口""" data_file_path = os.path.join(DATA_DIR, "case_data.xlsx") excel = ReadExcel(data_file_path, 'add') cases = excel.read_data_obj() http = HTTPSession() db = ReadMysql(my_conf.get('mysql', 'host'), my_conf.get('mysql', 'user'), my_conf.get('mysql', 'password'), my_conf.getint('mysql', 'port'), my_conf.get('mysql', 'database')) @classmethod def setUpClass(cls): logger.debug("-------开始加标接口测试{}-------") @classmethod def tearDownClass(cls): logger.debug("-------结束加标接口测试{}-------") @data(*cases) def test_add(self, case): # 第一步:入参和用例数据 url = my_conf.get('url', 'url') + case.url + case.interface case.data = data_replace(case.data) if "*memberId*" in case.data: max_id = self.db.find_one("select max(id) from member")[0] memberId = max_id + 1 case.data = case.data.replace("*memberId*", str(memberId)) # 判断是否需要sql校验 if case.check_sql: case.check_sql = data_replace(case.check_sql) # 获取当前用户加标签的数量 start_count = self.db.find_count(case.check_sql) # 第二步:发送接口请求 res = self.http.request(case.method, url, data=eval(case.data)).json() print(res) res_code = res['code'] # 第三步:校验结果 try: self.assertEqual(str(case.excepted), res_code) if case.check_sql: case.check_sql = data_replace(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(case.case_id + 1, 8, "fail") logger.info("测试数据为:{}".format(case.data)) logger.info("期望结果是:{}".format(case.excepted_code)) logger.info("实际结果是:{}".format(res)) logger.exception(e) raise e else: self.excel.write_data(case.case_id + 1, 8, "pass") logger.info("测试数据为:{}".format(case.data)) logger.info("期望结果是:{}".format(case.excepted)) logger.info("实际结果是:{}".format(res))
def send_mail(file, file_new): f = open(file_new, 'rb') # 读取测试报告正文 mail_body = f.read() f.close() smtpserver = 'smtp.qq.com' # 发送邮箱服务器 # 发送邮箱用户/密码(登录邮箱操作) username = '******' passwd = 'passwd' sender = '*****@*****.**' # 发送邮箱 receiver = ['*****@*****.**', '*****@*****.**'] # 接收邮箱 logger.info(("[{}]Receiving mailbox:{}".format(os.path.basename(__file__), receiver))) tname = time.strftime('%Y-%m-%d %H-%M-%S', time.localtime()) header = u'%s 接口自动化测试报告 ' % tname # 只发正文,不发附件 subject = '自动化测试报告' # 发送主题 msg = MIMEText(mail_body, 'html', 'utf-8') msg['Subject'] = Header(subject, 'utf-8') msg['Header'] = header msg['From'] = sender msg['To'] = ",".join(receiver) # 连接发送邮件 smtp = smtplib.SMTP() smtp.connect(smtpserver) smtp.login(username, passwd) # 登录邮箱 smtp.sendmail(sender, receiver, msg.as_string()) # 发送者和接收者 smtp.quit()
def login(self, username, password, verifycode=''): logger.info("[{}]login用户登陆信息:{}, {}, {}".format( os.path.basename(__file__), username, password, verifycode)) self.input_username(username) self.input_password(password) self.input_verifycode(verifycode) self.click_loginbtn()
def test_demo_001(self): """新用户注册""" logger.info('*===============用例{}\{}开始执行===============*'.format( __name__, sys._getframe().f_code.co_name)) sql = "delete from user_info where phone='18637607203';" sql1 = "delete from category_tree where media_name = 'gaozuxin'" flag = mysql.update(sql) flag2 = mysql.update(sql1) self.assertEqual(1, flag, msg="用户删除失败") self.assertEqual(1, flag2, msg="用户删除失败") one_browser_window() self.loginpage.open_regist() self.loginpage.regist('gaozuxin', 'gzx123456', '18637607203', '9274', 'A1b8S') self.loginpage.take_screenshot() islogin = self.indexpage.get_loginuser() try: self.assertEqual('gaozuxin', islogin, msg="注册并登录失败") except: data = {"subject": '[自动创建]新用户注册并登录异常', "description": ''} link_redmine(self.redmine_user, self.redmine_pwd, data) self.assertEqual('gaozuxin', islogin, msg="注册并登录失败") self.indexpage.click_exit_userbtn() logger.info('*===============用例{}\{}执行结束===============*'.format( __name__, sys._getframe().f_code.co_name))
def test005_task(self): """微博采集_微博号采集""" logger.info('*======================用例' + sys._getframe().f_code.co_name + '开始执行======================*') one_browser_window() sql1 = "delete from task_info where uid = 163 and task_name = '微博采集_微博号_大数据';" flag1 = mysql.update(sql1) if flag1 == 1: logger.info('微博采集微博号任务删除成功') else: logger.error('微博采集微博号任务删除失败') self.loginpage.open_login() self.loginpage.login('18201112814', 'gzx123456', 'A1b8S') self.loginpage.take_screenshot() self.loginpage.find_element(Taskherf_loc).click() self.taskpage.add_task() time.sleep(2) handles = driver.window_handles driver.switch_to.window(handles[-1]) taskname = '微博采集_微博号_大数据' taskcategory = 'category2' tasktype = '调度任务' cron = '*/1 * * * *' timebreak_loc = '30' isagent = '否' self.addtask.collect_init(taskname, taskcategory, tasktype, cron, timebreak_loc, isagent) wbkeyword = '大数据' self.addtask.new_weibo_collection(wbkeyword) time.sleep(2) self.addtask.click_savecnfbtn1() self.addtask.click_confirmbtn() self.addrule.take_screenshot() time.sleep(5) self.addtask.click_effectivenowbtn1() self.loginpage.take_screenshot() driver.switch_to.window(handles[0]) sql3 = "select task_id from task_info where uid = 163 and task_name = '微博采集_微博号_大数据';" task_id1 = mysql.select_one(sql3) time.sleep(120) self.loginpage.find_element(Dataherf_loc).click() task_id2 = self.datapage.get_first_taskid() self.loginpage.take_screenshot() if str(task_id1[0]) == str(task_id2): self.datapage.click_see_details() tasks = self.datapage.get_first_tasks() logger.info("任务抓取条数{}".format(tasks)) if str(tasks) != '0': logger.info("任务数据抓取正常") else: logger.error("任务数据抓取异常") else: logger.error("任务id获取异常") logger.info('*======================用例' + sys._getframe().f_code.co_name + '执行结束======================*')
def setUpClass(cls): logger.info( "****************************************start****************************************" ) cls.loginpage = LoginPage(driver) cls.indexpage = IndexPage(driver) cls.taskpage = TaskIndexPage(driver) cls.addtask = TaskAddPage(driver) cls.datapage = DataPage(driver)
def setUpClass(cls): logger.info( "************************************{}start*************************************" .format(__name__)) cls.loginpage = LoginPage(driver) cls.indexpage = IndexPage(driver) cls.redmine_user = '******' cls.redmine_pwd = 'jiuqi@310235' warnings.simplefilter("ignore", ResourceWarning)
def take_screenshot(self): rq = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime()) try: self._driver.get_screenshot_as_file( os.path.dirname(os.path.dirname(__file__)) + '\screenshots\{}.png'.format(rq)) logger.info("[{}]已截屏并保存{}.png!".format(os.path.basename(__file__), rq)) except Exception as e: logger.error("[{}]无法截屏!{}".format(os.path.basename(__file__), e))
def select_element(self, element_xpath, select_text): select1 = self.find_element(element_xpath) try: Select(select1).select_by_visible_text(select_text) logger.info("[{}]选择的元素是:{}".format(os.path.basename(__file__), select_text)) except (NoSuchElementException, TimeoutException) as e: logger.error("[{}]无法选择该元素{}".format(os.path.basename(__file__), e)) raise NoSuchElementException( msg='[{}]无法选择该元素{}'.format(os.path.basename(__file__), e))
def get_result(self, count_num): break_flag = False n = count_num // 10 + 1 m = count_num % 10 + 1 for i in range(1, n): for index in range(1, 11): if i == n - 1 and index == m: break_flag = True break rule_name_loc = '//*[@id="contentheight"]/div/table/tbody/tr[{}]/td[2]/span'.format( index) testbtn_loc = '//*[@id="contentheight"]/div/table/tbody/tr[{}]/td[10]/a[4]'.format( index) type_loc = '//*[@id="contentheight"]/div/table/tbody/tr[{}]/td[3]/span'.format( index) rule_name = self.find_element(rule_name_loc).text type = self.find_element(type_loc).text time.sleep(1) self.click_element(testbtn_loc) time.sleep(20) if type == '列表页': result = self.find_element(self.result_loc).text if result == '共0条数据': errinfo = self.find_element(self.errinfo_loc).text logger.error("规则名称:(第{}页第{}个){},{},#{}".format( i, index, rule_name, result, errinfo)) else: logger.info("规则名称:(第{}页第{}个){},{}".format( i, index, rule_name, result)) time.sleep(2) elif type == '正文页': try: title_text = self.find_element( self.title_text_loc).text content_text = self.find_element( self.content_text_loc).text time.sleep(2) logger.info( "规则名称:(第{}页第{}个){},title:{};content:{}".format( i, index, rule_name, title_text, content_text)) except: logger.error("规则名称:(第{}页第{}个)页面数据获取有误".format( i, index, rule_name)) else: logger.error('所属类型有误') self.take_screenshot() self.click_element(self.closebtn_loc) if break_flag: break time.sleep(1) # self..click_element(next_page_loc) self.next_page(i + 1)
def regist(self, regist_username, regist_password, regist_mobile, regist_code, regist_verifycode): logger.info("[{}]regist用户注册信息:{}, {}, {}, {}, {}".format( os.path.basename(__file__), regist_username, regist_password, regist_mobile, regist_code, regist_verifycode)) self.input_regist_username(regist_username) self.input_regist_password(regist_password) self.input_regist_mobile(regist_mobile) self.input_regist_code(regist_code) self.input_regist_verifycode(regist_verifycode) self.click_registbtn()
def setUpClass(cls): logger.info( "****************************************start****************************************" ) cls.loginpage = LoginPage(driver) cls.indexpage = IndexPage(driver) cls.rulepage = RuleIndexPage(driver) cls.addrule = RuleAddPage(driver) cls.extensionpage = ExtensionPage(driver) cls.taskpage = TaskIndexPage(driver) cls.addtask = TaskAddPage(driver) cls.datapage = DataPage(driver)
def test007_rule(self): """""" logger.info('*======================用例' + sys._getframe().f_code.co_name + '开始执行======================*') one_browser_window() self.loginpage.open_login() self.loginpage.login('18201112814', 'gzx123456', 'A1b8S') self.loginpage.find_element(Taskherf_loc).click() logger.info('*======================用例' + sys._getframe().f_code.co_name + '执行结束======================*')
def test_003(self): """采云用户名输入框测试""" logger.info('*****************************用例' + sys._getframe().f_code.co_name + '执行开始****************************') self.loginpage.input_username('1111') time.sleep(1) self.loginpage.input_username('2222') time.sleep(1) self.loginpage.input_username('3333') time.sleep(1) logger.info('*****************************用例' + sys._getframe().f_code.co_name + '执行结束****************************')
def test_regist_001(self): """新用户注册""" logger.info('*======================用例' + sys._getframe().f_code.co_name + '开始执行======================*') one_browser_window() sql = "delete from user_info where phone='18637607203';" flag = mysql.update(sql) if flag: logger.info("用户删除成功") else: logger.error("用户删除失败") self.loginpage.open_regist() self.loginpage.regist('gaozuxin', 'gzx123456', '18637607203', '9274', 'A1b8S') self.loginpage.take_screenshot() islogin = self.indexpage.get_loginuser() if islogin == 'gaozuxin': logger.info('注册并登录成功') else: logger.error('注册并登录失败') time.sleep(2) self.indexpage.click_exit_userbtn() time.sleep(3) logger.info('*======================用例' + sys._getframe().f_code.co_name + '执行结束======================*')
def test006_rule(self): """规则模板验证""" logger.info('*======================用例' + sys._getframe().f_code.co_name + '开始执行======================*') one_browser_window() self.indexpage.click_exit_userbtn() self.loginpage.open_login() self.loginpage.login('admin', 'caiyun123', 'A1b8S') self.loginpage.find_element(Ruleherf_loc).click() self.rulepage.get_result(count_num=72) # 规则条数 logger.info('*======================用例' + sys._getframe().f_code.co_name + '执行结束======================*')
def new_report(file, testreport): # 方式1: # lists = os.listdir(testreport) # lists.sort(key = lambda fn: os.path.getmtime(testreport + '\\' + fn)) # file_new = os.path.join(testreport,lists[-1]) # print(file_new) # return file_new # 方式2: dirs = os.listdir(testreport) dirs.sort() newreportname = dirs[-1] logger.info("[{}]The new report name:{}".format(os.path.basename(__file__), newreportname)) file_new = os.path.join(testreport, newreportname) return file_new
def setUpClass(cls): logger.info( "************************************{}start*************************************" .format(__name__)) cls.loginpage = LoginPage(driver) cls.indexpage = IndexPage(driver) cls.rulepage = RuleIndexPage(driver) cls.addrule = RuleAddPage(driver) cls.extensionpage = ExtensionPage(driver) cls.taskpage = TaskIndexPage(driver) cls.addtask = TaskAddPage(driver) cls.datapage = DataPage(driver) cls.redmine_user = '******' cls.redmine_pwd = '' warnings.simplefilter("ignore", ResourceWarning)
def test_demo_001(self): """用户登陆验证""" logger.info('*===============用例{}\{}开始执行===============*'.format( __name__, sys._getframe().f_code.co_name)) one_browser_window() self.loginpage.open_regist() self.loginpage.regist('gaogao', 'gzx123456', '18201112814', '9274', 'A1b8S') show_info_r = self.loginpage.find_element_xpath( '//*[@id="search-form"]/div[2]/input').text self.assertEqual('用户名已存在,请更换', show_info_r, msg="注册用户,用户名错误提示信息有误") time.sleep(3) logger.info('*===============用例{}\{}执行结束===============*'.format( __name__, sys._getframe().f_code.co_name))
def open_browser(self): config = configparser.ConfigParser() dir = os.path.abspath('.').split('src')[0] config.read(dir + "/config/config.ini") browser = config.get("browserType", "browserName") logger.info("You had select %s browser." % browser) url = config.get("testServer", "URL") if browser == "Firefox": self.driver = webdriver.Firefox() elif browser == "Chrome": self.driver = webdriver.Chrome() elif browser == "IE": self.driver = webdriver.Ie() self.driver.set_window_size(1920, 1080) # 分辨率 # self.driver.maximize_window()#最大化 self.driver.get(url) return self.driver
def http_request(self, url, method, args): if method.lower() == 'get': try: logger.info('发起get请求') result = requests.get(url, args) except Exception as e: logger.exception('发起get请求出错啦,错误为:%s', e) raise e elif method.lower() == 'post': try: logger.info('发起post请求') result = requests.post(url, args) except Exception as e: logger.exception('发起post请求出错啦,错误为:%s', e) raise e else: logger.exception('请求类型错误,发起请求失败') return result
def test_002(self): """错误登录信息成功验证""" logger.info('*****************************用例' + sys._getframe().f_code.co_name + '执行开始****************************') logger.info("用户登陆信息:18201112814, 123456, abcd") show_div = self.loginpage.login('18201112814', '123456', 'abcd') logger.info("登录信息提示:%s" % show_div) self.assertEqual('验证码不正确!', show_div, msg="提示信息错误") logger.info('*****************************用例' + sys._getframe().f_code.co_name + '执行结束****************************')
def test_demo_004(self): """任务界面【测试/修改/删除】按钮有效性验证""" logger.info('*======================用例' + sys._getframe().f_code.co_name + '开始执行======================*') sql1 = "delete from task_info where uid = 163 and (task_name = '脚本使用任务_常规采集' or task_name = '脚本使用任务_常规采集_copy');" sql2 = "INSERT INTO `task_info` (`uid`, `task_name`, `task_config`, `category`, `lang`, `period_cron`, `dt`, `taskstatus`, `notifycls`, `time_break`, `cookie`, `is_agent`, `agent_type`, `agent_value`, `spider_type`, `url`, `spider_status`, `create_uid`, `update_uid`, `trigger_condition`, `warn_grade`, `warn_status`, `mid`, `modelkeywords`, `task_type`) VALUES ('163', '脚本使用任务_常规采集', '{\"max_step\":2,\"spider_type\":1,\"keywords\":[],\"recursion_count\":1,\"recursion_field\":\"\",\"config\":[{\"step_id\":\"data1\",\"step_name\":\"data1\",\"data_name\":\"data1\",\"url\":\"http://in.nen.com.cn/ssjj/index.shtml\",\"rule_id\":\"920\",\"rule_mark\":\"\",\"time_out\":\"5000\",\"rule_type\":1,\"detail_rule_type\":2,\"delete\":false,\"wait\":0,\"filter\":\"url\",\"filter_con\":1,\"filter_type\":false,\"step_col\":\"url\",\"page_num\":0,\"check\":true,\"rend\":true,\"rendrule\":false},{\"step_id\":\"data2\",\"step_name\":\"data2\",\"data_name\":\"data2\",\"url\":\"url\",\"rule_id\":\"919\",\"rule_mark\":\"\",\"time_out\":\"5000\",\"rule_type\":2,\"detail_rule_type\":2,\"delete\":false,\"wait\":0,\"step_col\":\"\",\"page_num\":0,\"filter\":\"\",\"filter_con\":1,\"filter_type\":false,\"check\":true,\"sample_url\":\"http://in.nen.com.cn/system/2018/03/23/020430991.shtml\",\"rend\":true,\"rendrule\":false,\"moving\":false}],\"loginform\":{\"formtype\":\"FORM\",\"submittype\":\"POST\",\"url\":\"http://\",\"body\":true,\"header\":true,\"bodys\":[],\"headers\":[]},\"notify\":{\"notify\":false,\"notify_url\":\"\",\"cls_type\":\"\",\"cls_field\":\"\",\"tag_type\":\"0\",\"tag\":\"\",\"data_map\":[{\"data1._SEED_URL\":\"_SEED_URL\"},{\"data1.title\":\"title\"},{\"data1.url\":\"url\"},{\"data2._SEED_URL\":\"_SEED_URL\"},{\"data2.title\":\"title\"},{\"data2.dt\":\"dt\"},{\"data2.content\":\"content\"}],\"data_map_constant\":[],\"cls_map\":[]}}', '1315', 'zh-CN', '*/1 * * * *', '2019-01-25 16:27:13', 'OFF', '', '30', '', '0', '2', '', '1', 'http://in.nen.com.cn/ssjj/index.shtml', NULL, '163', '163', NULL, NULL, NULL, NULL, NULL, '1');" flag1 = mysql.update(sql1) # 先删除历史任务 self.assertEqual(1, flag1, msg="删除历史任务失败") time.sleep(2) flag2 = mysql.update(sql2) # 插入新任务 self.assertEqual(1, flag2, msg="插入新任务失败") one_browser_window() self.loginpage.open_login() self.loginpage.login('18201112814', 'gzx123456', 'A1b8S') self.loginpage.take_screenshot() # self.loginpage.find_element(Taskherf_loc).click() self.taskpage.open() task_name1 = self.taskpage.get_first_taskname() self.assertEqual("脚本使用任务_常规采集", str(task_name1), msg="任务名称获取有误") self.taskpage.click_first_testbtn() time.sleep(20) result_text = self.taskpage.get_firstresult() logger.info("测试任务抓取条数:{}".format(result_text)) self.taskpage.take_screenshot() self.assertEqual("共30条数据", str(result_text), msg="测试按钮抓取数据异常") self.taskpage.click_first_close() time.sleep(1) self.taskpage.click_first_modifybtn() time.sleep(2) handles = driver.window_handles driver.switch_to.window(handles[-1]) self.addtask.input_cron('59 23 31 12 *') time.sleep(1) self.addtask.click_savecnfbtn() time.sleep(1) self.addtask.click_confirmbtn() time.sleep(2) self.addtask.click_backlistbtn() time.sleep(1) schedul = self.taskpage.get_first_schedul() logger.info("获取任务的调度文本:{}".format(schedul)) self.assertEqual("每年12月31日23时59分", str(schedul), msg="修改按钮校验失败") self.taskpage.click_first_deletebtn() time.sleep(1) self.taskpage.click_confirmbtn() time.sleep(2) sql3 = "select * from task_info where uid = 163 and task_name = '脚本使用任务_常规采集_copy' and taskstatus != 'DELETE' ;" task_name = mysql.select_all(sql3) # 查询任务是否删除 self.assertEqual('()', str(task_name), msg="删除按钮校验失败") logger.info('*======================用例' + sys._getframe().f_code.co_name + '执行结束======================*')
def test_login_004(self): """图片验证码注册校验""" logger.info('*======================用例' + sys._getframe().f_code.co_name + '开始执行======================*') one_browser_window() self.loginpage.open_login() vrfcode_data = [ { 'code': '', 'show_info': '此处不能为空' }, { 'code': 'ab12', 'show_info': '' }, ] for index in range(len(vrfcode_data)): self.loginpage.input_verifycode(vrfcode_data[index]['code']) self.loginpage.switch_verifyimg() time.sleep(1) show_info_l = self.loginpage.showinfo_verifycode() logger.info("[{}]'图片验证码':{};期望:{};实际:{}".format( os.path.basename(__file__), vrfcode_data[index]['code'], vrfcode_data[index]['show_info'], show_info_l)) self.assertIn(vrfcode_data[index]['show_info'], show_info_l, msg="登录用户,图片验证码提示信息有误") time.sleep(1) time.sleep(3) logger.info('*======================用例' + sys._getframe().f_code.co_name + '执行结束======================*')
def test_regist_003(self): """密码注册验证""" logger.info('*======================用例' + sys._getframe().f_code.co_name + '开始执行======================*') one_browser_window() self.loginpage.open_regist() pwd_data = [{ 'pwd': '', 'show_info': '此处不能为空' }, { 'pwd': 'a2345q', 'show_info': '' }, { 'pwd': 'qwerty', 'show_info': '密码中必须包含6-16位字母、数字组合' }, { 'pwd': '12345q', 'show_info': '' }, { 'pwd': '1234q', 'show_info': '密码中必须包含6-16位字母、数字组合' }, { 'pwd': 'qwert1', 'show_info': '' }, { 'pwd': '1234567890123456', 'show_info': '密码中必须包含6-16位字母、数字组合' }, { 'pwd': '123456789012345q', 'show_info': '' }, { 'pwd': '123456789012345qq', 'show_info': '密码中必须包含6-16位字母、数字组合' }, { 'pwd': '123456ab9012345q', 'show_info': '' }, { 'pwd': '__11__', 'show_info': '密码中必须包含6-16位字母、数字组合' }] for index in range(len(pwd_data)): self.loginpage.input_regist_password(pwd_data[index]['pwd']) self.loginpage.switch_regist_img() time.sleep(1) show_info_l = self.loginpage.showinfo_registpwd() logger.info("[{}]密码:{};期望:{};实际:{}".format( os.path.basename(__file__), pwd_data[index]['pwd'], pwd_data[index]['show_info'], show_info_l)) self.assertIn(pwd_data[index]['show_info'], show_info_l, msg="注册用户,密码提示信息有误") time.sleep(3) logger.info('*======================用例' + sys._getframe().f_code.co_name + '执行结束======================*')
def test_001(self): """错误登录信息失败验证""" logger.info('*****************************用例' + sys._getframe().f_code.co_name + '执行开始****************************') show_div = self.loginpage.login('18201112814', 'jiayou101900', 'abcd') logger.info("登录信息提示:%s" % show_div) self.assertEqual('登录成功', show_div, msg="用户登录失败") logger.info('*****************************用例' + sys._getframe().f_code.co_name + '执行结束****************************')
def test_regist_002(self): """用户名注册验证""" logger.info('*======================用例' + sys._getframe().f_code.co_name + '开始执行======================*') one_browser_window() self.loginpage.open_regist() usr_data = [{ 'usr': '', 'show_info': '此处不能为空' }, { 'usr': '******', 'show_info': '' }, { 'usr': '******', 'show_info': '用户名只能包含2位以上20位以下数字、英文、中文、下划线' }, { 'usr': '******', 'show_info': '' }, { 'usr': '******', 'show_info': '用户名只能包含2位以上20位以下数字、英文、中文、下划线' }, { 'usr': '******', 'show_info': '' }, { 'usr': '******', 'show_info': '用户名只能包含2位以上20位以下数字、英文、中文、下划线' }, { 'usr': '******', 'show_info': '' }] for index in range(len(usr_data)): self.loginpage.input_regist_username(usr_data[index]['usr']) self.loginpage.switch_regist_img() time.sleep(1) show_info_l = self.loginpage.showinfo_registuser() logger.info("[{}]用户名:{};期望:{};实际:{}".format( os.path.basename(__file__), usr_data[index]['usr'], usr_data[index]['show_info'], show_info_l)) self.assertIn(usr_data[index]['show_info'], show_info_l, msg="注册用户,用户名提示信息有误") time.sleep(1) self.loginpage.regist('gaozuxin', 'gzx123456', '13683066505', '9274', 'A1b8S') # show_info_r = self.loginpage.showinfo_regist() # self.assertEqual('用户名已存在,请更换', show_info_r, msg="注册用户,用户名错误提示信息有误") time.sleep(3) logger.info('*======================用例' + sys._getframe().f_code.co_name + '执行结束======================*')
def test_004(self): """采云用户成功登录验证""" logger.info('*****************************用例' + sys._getframe().f_code.co_name + '执行开始****************************') data = [('admin', 'caiyun123', 'A1b8S', '登录成功!')] for index in range(len(data)): logger.info("用户登陆信息:%s, %s, %s, 期望提示信息:%s" % (data[index][0], data[index][1], data[index][2], data[index][3])) res = self.loginpage.login(data[index][0], data[index][1], data[index][2]) self.loginpage.take_screenshot() logger.info("用户登录实际提示信息:%s" % res) # self.assertEqual(data[index][3], res, msg="提示信息错误") time.sleep(3) logger.info('*****************************用例' + sys._getframe().f_code.co_name + '执行结束****************************')