• Selenium(九)测试用例数据分离与从文件导入数据


    一.测试用例数据与代码分离

    1.从之前的脚本来看,我还是把数据写在了脚本中,这样脚本的通用性很差。全局的数据其实可以从数据库、文本文件、Excel中直接读取。

    2.代码和用户数据分离:

    3.数据设计--以字典的形式

    from selenium import webdriver
    import time
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import WebDriverWait
    
    
    
    def openBrower():                    #配置浏览器
        webdriver_handle = webdriver.Firefox()
        return webdriver_handle      
                                          
    def openUrl(handle,url):               #打开url
        handle.get(url)
    
    def get_ele_times(driver,times,func):
        return WebDriverWait(driver,times).until(func)  #等待方法    
    
    def findElement(driver,arg):
        '''
         arg must be dict
         1.login:登录入口
         2.user_xpath:用户名
         3.pwd_xpath:密码
         4.login_xpath:登录按钮
         
         return useEle,pwdEle,loginEle
        '''
        ele_login = get_ele_times(driver,10,lambda driver:driver.find_element_by_xpath(arg['login']))
        ele_login.click()      
        useEle = driver.find_element_by_xpath(arg['user_xpath'])
        pwdEle = driver.find_element_by_xpath(arg['pwd_xpath'])
        loginEle = driver.find_element_by_xpath(arg['login_xpath'])
        return useEle,pwdEle,loginEle
    
    def sendVals(eletuple,arg):
        '''
        ele tuple
        account:uname,pwd
        '''
        listkey = ['uname','pwd']
        i = 0
        for key in listkey:
            eletuple[i].send_keys('')
            eletuple[i].clear()
            eletuple[i].send_keys(arg[key])
            i+=1
        eletuple[2].click()    
    def checkResult(driver,text):
        try:
            driver.find_element_by_link_text(test)
            print ("ACCOUNT AND PWD ERROR!")
        except:
             print ("ACCOUNT AND PWD RIGHT!")
        
    def login_test(ele_dict):
        driver = openBrower()
        openUrl(driver,ele_dict['url'])
        driver.maximize_window()
           
        ele_tuple = findElement(driver,ele_dict)   #接收字典的值
        
        sendVals(ele_tuple,ele_dict)
        checkResult(driver,ele_dict['errorid'])
        
        driver.find_element_by_link_text('退出').click()
        
    if __name__ == '__main__':
        url = 'http://www.maiziedu.com/'                          #将数据都放入字典中
        account = 'XXX'
        pwd = 'maizi123456'
        ele_dict = {'url':url,'login':'/html/body/div[2]/div/div/div/div/a[2]','user_xpath':'//*[@id="id_account_l"]',
                    'pwd_xpath':'//*[@id="id_password_l"]','login_xpath':'//*[@id="login_btn"]',
                    'errorid':'该账号不正确','uname':account,'pwd':pwd}
    
        login_test(ele_dict)

    这样把用户名和密码也加入字典中是不合理的,所以要把用户名和密码抽出来单独用一个list存放:

    def login_test(ele_dict,user_list):
        driver = openBrower()
        openUrl(driver,ele_dict['url'])
        driver.maximize_window()
           
        ele_tuple = findElement(driver,ele_dict)   #接收字典的值
        for arg in user_list:
            sendVals(ele_tuple,arg)
            checkResult(driver,ele_dict['errorid'])
        
    if __name__ == '__main__':
        url = 'http://www.maiziedu.com/'
        account = 'XXX'
        pwd = 'maizi123456'
        ele_dict = {'url':url,'login':'/html/body/div[2]/div/div/div/div/a[2]','user_xpath':'//*[@id="id_account_l"]',
                    'pwd_xpath':'//*[@id="id_password_l"]','login_xpath':'//*[@id="login_btn"]',
                    'errorid':'该账号不正确'}
        user_list = [{'uname':account,'pwd':pwd}]
        login_test(ele_dict,user_list)
        
        

    二.从文件导入数据

    1.webinfo.py

    #coding:UTF-8
    import codecs
    
    def get_webinfo(path):
        web_info={}                  #定义一个空的字典 
        #config=open(path)
        config = codecs.open(path,'r','utf-8')    #打开一个路径为path的txt文件 如果打印的话 会出现txt文件里的所有内容
        for line in config:        #一行一行的遍历txt文件中的内容
            result = [ele.strip() for ele in line.split('=')]
            '''
            列表解析以'='符号为分隔,将遍历的一行的内容放在一个数组里,每一个result的形式都是[ , ] 
            可用来调试查看是否通过“=”分离开数据 print(result)
            '''
            web_info.update(dict([result]))
                        
        return web_info
    
    def get_userinfo(path):
        user_info = []
        config = codecs.open(path,'r','utf-8')   
        for line in config:
            user_dict = {}
            result = [ele.strip() for ele in line.split(' ')]
            for r in result:
                account = [ele.strip() for ele in r.split('=')]
                user_dict.update(dict([account]))
            user_info.append(user_dict)  
        return user_info        
    
    if __name__ == '__main__':
        webinfo = get_webinfo(r'C:Users胡廷祥Desktopwebinfo.txt')
        for key in info:
            print(key,info[key])    
            userinfo = get_userinfo(r'C:Users胡廷祥Desktopuserinfo.txt')
        for l in userinfo:
            print(l)
        print(userinfo)

    2.login.py

    from selenium import webdriver
    import time
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import WebDriverWait
    from webinfo import get_webinfo
    from webinfo import get_userinfo
    
    def openBrower():                    #配置浏览器
        webdriver_handle = webdriver.Firefox()
        return webdriver_handle      
                                          
    def openUrl(handle,url):               #打开url
        handle.get(url)
    
    def get_ele_times(driver,times,func):
        return WebDriverWait(driver,times).until(func)  #等待方法    
    
    def findElement(driver,arg):
        '''
         arg must be dict
         1.login:登录入口
         2.user_xpath:用户名
         3.pwd_xpath:密码
         4.login_xpath:登录按钮
         
         return useEle,pwdEle,loginEle
        '''
        ele_login = get_ele_times(driver,10,lambda driver:driver.find_element_by_xpath(arg['login']))
        ele_login.click()      
        useEle = driver.find_element_by_xpath(arg['user_xpath'])
        pwdEle = driver.find_element_by_xpath(arg['pwd_xpath'])
        loginEle = driver.find_element_by_xpath(arg['login_xpath'])
        return useEle,pwdEle,loginEle
    
    def sendVals(eletuple,arg):
        '''
        ele tuple
        account:uname,pwd
        '''
        listkey = ['uname','pwd']
        i = 0
        for key in listkey:
            eletuple[i].send_keys('')
            eletuple[i].clear()
            eletuple[i].send_keys(arg[key])
            i+=1
        eletuple[2].click()    
    def checkResult(driver,text):
        try:
            driver.find_element_by_link_text(test)
            print ("ACCOUNT AND PWD ERROR!")
        except:
             print ("ACCOUNT AND PWD RIGHT!")
        
    def login_test(ele_dict,user_list):
        driver = openBrower()
        openUrl(driver,ele_dict['url'])
        driver.maximize_window()
           
        ele_tuple = findElement(driver,ele_dict)   #接收字典的值
        for arg in user_list:
            sendVals(ele_tuple,arg)
            checkResult(driver,ele_dict['errorid'])
        
    if __name__ == '__main__':
        url = 'http://www.maiziedu.com/'
        account = 'XXX'
        pwd = 'maizi123456'
        '''
        ele_dict = {'url':url,'login':'/html/body/div[2]/div/div/div/div/a[2]','user_xpath':'//*[@id="id_account_l"]',
                    'pwd_xpath':'//*[@id="id_password_l"]','login_xpath':'//*[@id="login_btn"]',
                    'errorid':'该账号不正确'}
       user_list = [{'uname':account,'pwd':pwd}]
        '''
        ele_dict = get_webinfo(r'C:UsersXXXDesktopwebinfo.txt')
        user_list = get_userinfo(r'C:UsersXXXDesktopuserinfo.txt')
        #file webinfo/userinfo  ele_dict = get_webinfo(path) user_list = get_userinfo(path)
        login_test(ele_dict,user_list)
        
  • 相关阅读:
    NSlog 对于新手的一点技巧和用法.
    iOS7+ 扫描二维码和条形码实现 耗时操作
    关于iOS block循环引用的一点理解
    Xcode 快捷开发的几个插件
    在Mac下面删除所有的.svn文件
    一个textView 预留空白的问题
    Supporting Multiple iOS Versions and Devices
    Building an iOS Universal Static Library
    iOS Library With Resources
    iOS开发长文--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总
  • 原文地址:https://www.cnblogs.com/dydxw/p/10484567.html
Copyright © 2020-2023  润新知