python3.5+selenium3.4自动化测试10_selenium框架2.0-unittest(下)

框架2.0(下)

停了好长一段时间没有更新,最近比较忙,以后坚持至少一个月内输出1篇,继续上次需要掌握的技能,这次主要的函数调用和测试用例集的批量执行.

8.函数调用其实在前面几篇也有讲到,主要用于登陆的用户名和密码组合测试,可以参考

python3.5+selenium3.4自动化测试2_参数化
python3.5+selenium3.4自动化测试4_随机组合的用户名和密码登陆
下面在讲一个登陆和退出模块化,一般的系统都会有涉及到登陆和退出,当验证完登陆和退出的用例后,一般我们会有一组正常的用户名和密码进行登陆然后测试其他内容,这个时候登陆就可以独立到一个文件进行调用即可这边上一下登陆的代码和调用

创建一个mod_login_on.py

# _*_ coding: utf-8 _*_

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchAttributeException
import unittest,time,re
from time import strftime, localtime
from datetime import datetime
#登陆函数
def login(self):
    driver=self.driver
    try:
        driver.find_element_by_id("username").send_keys("admin")
        driver.find_element_by_id("secret").send_keys("password1")
        Select(driver.find_element_by_id('language')).select_by_value("en")
        driver.find_element_by_id("login_button").click()
        
    except:
        driver.get_screenshot_as_file(u"D:/python/selenium_use_case/error_png/2.ext/2.1_%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])

调用登陆模块

# _*_ coding: utf-8 _*_
__author__ = 'leo'
__date__ = '2017/7/6 10:29'

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchAttributeException
import unittest,time,re
from time import strftime, localtime
from datetime import datetime

import HTMLTestRunner
#import mod_login_on函数
from Pubilic_mod import mod_login_on

class Delext(unittest.TestCase):
    def setUp(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.base_url="http://192.168.1.131"
        self.verificationErrors=[]
        self.accept_next_alert=True

    def test_Delext(self):
        u"""2.2.1 删除所有"""    
        driver=self.driver
        driver.get(self.base_url+"/")


        #调用login模块
        mod_login_on.login(self)


        try:
            time.sleep(3)
            # driver.switch_to_alert().accept()
            driver.implicitly_wait(3) #智能等待30
            # driver.find_element_by_id("current").click()
            driver.find_element_by_xpath(".//*[@id='nav']/ul/li[4]/a").click()

            #切换到frame中再找到对应的元素
            driver.switch_to.frame("mainscreen")
            driver.find_element_by_xpath(".//*[@id='btn_new_bulkexten']/span/span").click()
            driver.find_element_by_xpath(".//*[@id='btn_save_bulk']/span/span").click()

            driver.find_element_by_id("CHECKALL").click()
            driver.find_element_by_xpath(".//*[@id='btn_delete_selected']/span/span").click()
            driver.switch_to_alert().accept()

            #从frame中切回主文档
            driver.switch_to.default_content()
            driver.find_element_by_xpath(".//*[@id='applyChanges_Button']/font").click()
            time.sleep(10)#等待10

        except:
            driver.get_screenshot_as_file(u"D:/python/selenium/error_png/2.ext/2.2/%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])

    def tearDown(self):
        time.sleep(3)
        self.driver.quit()
        self.assertEqual([],self.verificationErrors)
if __name__=="__main__":
    suite=unittest.TestSuite()
    suite.addTest(Delext("test_Delext"))

    unittest.TextTestRunner().run(suite)

9.测试用例集批量执行,先讲一下框架,这边先主要讲分为三个大模块error_png,report,test_case三个一级目录,主要存放错误图片,测试报告,测试用例集

├─error_png
│  ├─1.login
│  ├─2.ext
├─report
└─test_case
    └─case
        ├─A_login
        │  └─case_a_logininterface.py
        │  └─case_b_reset.py
        ├─B_ext
        │  └─case_a_creat.py
        │  └─case_b_reset.py
        ├─Pubilic_mod
        │  └─mod_login_on.py
        ├─all_test.py

通过上面的图片可以看出主要的用例集合放在case文件夹下,按大用例集分不同的文件夹,下面包含对应的.py测试用例,和批量执行文件all_test.py

#coding=utf-8
import sys
from time import strftime, localtime
from datetime import datetime

from case.A_login import *
from case.B_ext import *


import unittest,doctest
import HTMLTestRunner

suite=unittest.TestSuite()
#login
suite.addTest(unittest.makeSuite(case_a_logininterface.LoginInterface))
suite.addTest(unittest.makeSuite(case_b_reset.LoginReset))

#ext
suite.addTest(unittest.makeSuite(case_a_creatext.Createext))
suite.addTest(unittest.makeSuite(case_b_delext.Delext))



filename='D:\\python\\selenium\\report\\result20_%s.html'% datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3]
fp=open(filename,'wb')
runner=HTMLTestRunner.HTMLTestRunner(
    stream=fp,
    title='Report_title',
    description='Report_descrition')
runner.run(suite)

a.需要说明下,这个在创建A_login的时候需要选择新建python package,会自动带一个init.py文件,有什么作用可以自行百度下,这边主要添加对应的py文件,如下图:

__init__.py

在批量运行的文件中要import这些内容

from case.A_login import *
from case.B_ext import *

b.这边批量运行集合,主要跟单个运行添加测试到suite容器一样

if __name__=="__main__":
    suite=unittest.TestSuite()
    suite.addTest(Delext("test_Delext"))

    unittest.TextTestRunner().run(suite)

在每个用例末尾使用unitest.TextTestRunner()来运行单个脚本中的多个case,这边的TextTestRunner在上篇文章讲过和HTMLTestRunner一样是继承了TestResult类,TextTestRunner这个主要以文本形式展示,HTMLTestRunner这个将统一展现在html上,这边通过统一的脚本添加所有的用例到suite容器中,run这些用例

suite=unittest.TestSuite()
#login
suite.addTest(unittest.makeSuite(case_a_logininterface.LoginInterface))
suite.addTest(unittest.makeSuite(case_b_reset.LoginReset))

最后运行输出的报告


测试报告

通过这样的框架和需要理解的技巧,通过不断练习就会在2.0的的基础上不断巩固和对Python的深入了解,也基本上满足了一般公司的测试要求

-----------------------------------------------------分割线-----------------------------------------------------

用实际用例代码长期更新,介绍selenium使用中的知识小点,希望大家关注,给予鼓励赞赏

关注微信公众号:无敌轻车

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容