说明:本项目采用流程控制思想,未引用unittest&pytest等单元测试框架
一.项目介绍
目的
测试某官方网站登录功能模块可以正常使用
用例
1.输入格式正确的用户名和正确的密码,验证是否登录成功;
 2.输入格式正确的用户名和不正确的密码,验证是否登录失败,并且提示信息正确;
 3.输入格式正确的用户名和任意密码,验证是否登录失败,并且提示信息正确;
 4.用户名和密码两者都为空,验证是否登录失败,并且提示信息正确;
 5.用户名和密码两者之一为空,验证是否登录失败,并且提示信息正确;
环境
Windows10 +Python3.6+selenium3.13+Pycharm
环境我想大多数人都会搭建,有事没事找百度,一搜一箩筐,哈哈!我自己刚学的时候也是各种问题各种百度,好在都解决了,感谢有度娘这么强大的存在!这里就不写环境怎么搭建了,直接进入主题
二.脚本设计
目的
我们的测试脚本需要达到:脚本可移植,脚本模块化,测试数据分离,输出测试报告 等目的
脚本设计模式

代码实现
项目目录结构

注:下面的文件存放在同一个目录下
-  1 #! user/bin/python
-  2 '''
-  3 代码说明:麦子学院登录模块自动化测试用例脚本
-  4 编写日期:
-  5 设置者:linux超
-  6 '''
-  7
-  8 import time
-  9 from selenium import webdriver
-  10 from webinfo import webinfo
-  11 from userinfo import userinfo
-  12 from log_fiile import login_log
-  13 from pathlib import Path
-  14
-  15 def open_web():
-  16 driver = webdriver.Firefox()
-  17 driver.maximize_window()
-  18 return driver
-  19
-  20 def load_url(driver,ele_dict):
-  21 driver.get(ele_dict['Turl'])
-  22 time.sleep(5)
-  23
-  24 def find_element(driver,ele_dict):
-  25 # find element
-  26 driver.find_element_by_class_name(ele_dict['image_id']).click()
-  27 if 'text_id' in ele_dict:
-  28 driver.find_element_by_link_text('登录').click()
-  29
-  30 user_id = driver.find_element_by_id(ele_dict['userid'])
-  31 pwd_id = driver.find_element_by_id(ele_dict['pwdid'])
-  32 login_id = driver.find_element_by_id(ele_dict['loginid'])
-  33 return user_id,pwd_id,login_id
-  34
-  35 def send_val(ele_tuple,arg):
-  36 # input userinfo
-  37 listkey = ['uname','pwd']
-  38 i = 0
-  39 for key in listkey:
-  40 ele_tuple[i].send_keys('')
-  41 ele_tuple[i].clear()
-  42 ele_tuple[i].send_keys(arg[key])
-  43 i+=1
-  44 ele_tuple[2].click()
-  45 def check_login(driver,ele_dict,log,userlist):
-  46 result = False
-  47 time.sleep(3)
-  48 try:
-  49 err = driver.find_element_by_id(ele_dict['error'])
-  50 driver.save_screenshot(err.text+'.png')
-  51 log.log_write('账号:%s 密码:%s 提示信息:%s:failed\n' %(userlist['uname'],userlist['pwd'],err.text))
-  52 print('username or password error')
-  53 except:
-  54 print('login success!')
-  55 log.log_write('账号:%s 密码:%s :passed\n'%(userlist['uname'],userlist['pwd']))
-  56 #login_out(driver,ele_dict)
-  57 return True
-  58 return result
-  59 def login_out(driver,ele_dict):
-  60 driver.find_element_by_class_name(ele_dict['logout']).click()
-  61 '''
-  62 def screen_shot(err):
-  63 i = 0
-  64 save_path = r'D:\pythondcode\capture'
-  65 capturename = '\\'+str(i)+'.png'
-  66 wholepath = save_path+capturename
-  67 if Path(save_path).is_dir():
-  68 pass
-  69 else:
-  70 Path(save_path).mkdir()
-  71 while Path(save_path).exists():
-  72 i+=1
-  73 capturename = '\\'+str(i)+'.png'
-  74 wholepath = save_path + capturename
-  75 err.screenshot(wholepath)
-  76 '''
-  77 def login_test():
-  78 log = login_log()
-  79 #ele_dict = {'url': 'http://www.maiziedu.com/', 'text_id': '登录', 'user_id': 'id_account_l', 'pwd_id': 'id_password_l'
-  80 #, 'login_id': 'login_btn','image_id':'close-windows-btn7','error_id':'login-form-tips'}
-  81 ele_dict = webinfo(r'D:\pythoncode\webinfo.txt')
-  82 #user_list=[{'uname':account,'pwd':pwd}]
-  83 user_list = userinfo(r'D:\pythoncode\userinfo.txt')
-  84 driver = open_web()
-  85 # load url
-  86 load_url(driver,ele_dict)
-  87 #find element
-  88 ele_tuple = find_element(driver,ele_dict)
-  89 # send values
-  90 ftitle = time.strftime('%Y-%m-%d', time.gmtime())
-  91 log.log_write('\t\t\t%s登录系统测试报告\n' % (ftitle))
-  92 for userlist in user_list:
-  93 send_val(ele_tuple,userlist)
-  94 # check login success or failed
-  95 result = check_login(driver,ele_dict,log,userlist)
-  96 if result:
-  97 login_out(driver,ele_dict)
-  98 time.sleep(3)
-  99 ele_tuple = find_element(driver,ele_dict)
-  100 time.sleep(3)
-  101 log.log_close()
-  102 driver.quit()
-  103
-  104 if __name__ == '__main__':
-  105 login_test()
-  1 #! user/bin/python
-  2 '''
-  3 代码说明:从文本文档中读取用户信息
-  4 编写日期:
-  5 设置者:linux超
-  6 '''
-  7
-  8 import codecs
-  9
-  10 def userinfo(path):
-  11 file = codecs.open(path,'r','utf-8')
-  12 user_list = []
-  13 for line in file:
-  14 user_dict = {}
-  15 result = [ele.strip() for ele in line.split(';')]
-  16 for sult in result:
-  17 re_sult = [ele.strip() for ele in sult.split('=')]
-  18 user_dict.update(dict([re_sult]))
-  19 user_list.append(user_dict)
-  20 return user_list
-  21
-  22 if __name__ == '__main__':
-  23 user_list = userinfo(r'D:\pythoncode\userinfo.txt')
-  24 print(user_list)
-  1 #! user/bin/python
-  2 '''
-  3 代码说明:从文本文档中读取web元素
-  4 编写日期:
-  5 设置者:linux超
-  6 '''
-  7
-  8 import codecs
-  9
-  10 def webinfo(path):
-  11 file = codecs.open(path,'r','gbk')
-  12 ele_dict = {}
-  13 for line in file:
-  14 result = [ele.strip() for ele in line.split('=')]
-  15 ele_dict.update(dict([result]))
-  16 return ele_dict
-  17
-  18 if __name__ == '__main__':
-  19 ele_dict = webinfo(r'D:\pythoncode\webinfo.txt')
-  20 for key in ele_dict:
-  21 print(key,ele_dict[key])
-  1 #! user/bin/python
-  2 '''
-  3 代码说明:测试输出报告
-  4 编写日期:
-  5 设置者:linux超
-  6 '''
-  7
-  8 import time
-  9
-  10 class login_log(object):
-  11 def __init__(self,path='',mode='w'):
-  12 filename = path + time.strftime('%Y-%m-%d',time.gmtime())
-  13 self.log = open(path+filename+'.txt',mode)
-  14 def log_write(self,msg):
-  15 self.log.write(msg)
-  16 def log_close(self):
-  17 self.log.close()
-  18 if __name__ == '__main__':
-  19 log=login_log()
-  20 ftitle = time.strftime('%Y-%m-%d',time.gmtime())
-  21 log.log_write('xiaochao11520')
-  22 log.log_close()
-  1 uname=273839363@qq.com;pwd=xiaochao11520
-  2 uname=273839363;pwd=xiaochao11520
-  3 uname= ;pwd=xiaochao11520
-  4 uname=273839363@qq.com;pwd=
-  5 uname=2738;pwd=xiaochao
-  1 Turl=http://www.maiziedu.com/
-  2 text_id=登录
-  3 userid=id_account_l
-  4 pwdid=id_password_l
-  5 loginid=login_btn
-  6 error=login-form-tips
-  7 logout=sign_out
-  8 image_id=close-windows-btn7
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

-  文档获取方式:
-  加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)
这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取