本文共 3887 字,大约阅读时间需要 12 分钟。
本项目旨在测试某官方网站的登录功能模块是否能够正常使用。
我们的测试脚本需要实现以下功能:
采用模块化设计,代码分为多个函数,实现对应的功能单元。通过参数化的方式,支持灵活配置测试数据和环境。
├── login_test.py ├── userinfo.py ├── webinfo.py ├── login_log.py └── config.py
login_test.py# 代码说明:麦子学院登录模块自动化测试用例脚本 def open_web(): """打开浏览器并最大化窗口""" driver = webdriver.Firefox() driver.maximize_window() return driver def load_url(driver, ele_dict): """加载指定URL并等待5秒""" driver.get(ele_dict['Turl']) time.sleep(5) def find_element(driver, ele_dict): """定位并点击元素""" driver.find_element_by_class_name(ele_dict['image_id']).click() if 'text_id' in ele_dict: driver.find_element_by_link_text('登录').click() def send_val(ele_tuple, arg): """输入用户名和密码""" listkey = ['uname', 'pwd'] for i, key in enumerate(listkey): ele_tuple[i].send_keys('') ele_tuple[i].clear() ele_tuple[i].send_keys(arg[key]) ele_tuple[2].click() def check_login(driver, ele_dict, log, userlist): """检查登录结果并处理异常""" try: err = driver.find_element_by_id(ele_dict['error']) driver.save_screenshot(err.text + '.png') log.log_write(f'账号:{userlist["uname"]}, 密码:{userlist["pwd"]}, 提示信息:{err.text}:failed') print('username or password error') return False except: print('login success!') log.log_write(f'账号:{userlist["uname"]}, 密码:{userlist["pwd"]}:passed') return True def login_out(driver, ele_dict): """退出登录页面""" driver.find_element_by_class_name(ele_dict['logout']).click() def login_test(): """执行登录测试""" log = login_log() ele_dict = webinfo('webinfo.txt') user_list = userinfo('userinfo.txt') driver = open_web() load_url(driver, ele_dict) ele_tuple = find_element(driver, ele_dict) ftitle = time.strftime('%Y-%m-%d', time.gmtime()) log.log_write(f'\t\t\t{ftitle}登录系统测试报告') for user in user_list: send_val(ele_tuple, user) if check_login(driver, ele_dict, log, user): login_out(driver, ele_dict) time.sleep(3) ele_tuple = find_element(driver, ele_dict) log.log_close() driver.quit() if __name__ == '__main__': login_test() userinfo.py# 代码说明:从文本文档中读取用户信息 def userinfo(path): """读取用户信息文件并返回用户列表""" file = codecs.open(path, 'r', 'utf-8') user_list = [] for line in file: user_dict = {} result = [ele.strip() for ele in line.split(';')] for sult in result: re_sult = [ele.strip() for ele in sult.split('=')] user_dict.update(dict([re_sult])) user_list.append(user_dict) return user_list if __name__ == '__main__': user_list = userinfo('userinfo.txt') print(user_list) webinfo.py# 代码说明:从文本文档中读取web元素信息 def webinfo(path): """读取元素信息文件并返回元素字典""" file = codecs.open(path, 'r', 'gbk') ele_dict = {} for line in file: result = [ele.strip() for ele in line.split('=')] ele_dict.update(dict([result])) return ele_dict if __name__ == '__main__': ele_dict = webinfo('webinfo.txt') for key in ele_dict: print(f'{key}: {ele_dict[key]}') uname=273839363@qq.com;pwd=xiaochao115202 uname=273839363;pwd=xiaochao115203 uname= ;pwd=xiaochao115204 uname=273839363@qq.com;pwd=5 uname=2738;pwd=xiaochao
Turl=http://www.maiziedu.com/ text_id=登录 userid=id_account_l pwdid=id_password_l loginid=login-btn image_id=close-windows-btn7 error=login-form-tips logout=sign_out
通过优化后的代码,测试能够覆盖所有预定义的用例,并生成详细的测试报告。
转载地址:http://hgofk.baihongyu.com/