美文网首页软件测试
第一个python&selenium自动化测试实战项目

第一个python&selenium自动化测试实战项目

作者: A丶咔咔 | 来源:发表于2020-07-11 16:12 被阅读0次

    说明:本项目采用流程控制思想,未引用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

    写完感觉内容好少,其实这么一个小模块涉及到的知识还是挺多的,但是不知道该如何下手整理,想看的就对付看下把,实在抱歉!

    另:笔者创建了一个测试交流群1125760266,欢迎大家加入交流探讨

    相关文章

      网友评论

        本文标题:第一个python&selenium自动化测试实战项目

        本文链接:https://www.haomeiwen.com/subject/djeicktx.html