• 多测师拱墅校区肖sir_高级金牌讲师_selenium(4)


    一、用例的封装

    from selenium import webdriver
    from time import sleep
    class discuz(object):
    def __init__(self): #网站
    self.driver=webdriver.Chrome()
    self.driver.get('http://192.168.203.128/bbs/')
    self.driver.maximize_window()
    self.driver.implicitly_wait(10)

    def login(self,name,pwd):#登录模块
    self.driver.find_element_by_id('ls_username').send_keys(name)
    self.driver.find_element_by_id('ls_password').send_keys(pwd)
    sleep(2)
    self.driver.find_element_by_xpath('/html/body/div[5]/div/div[1]/form/div/div/table/tbody/tr[2]/td[3]/button/em').click()

    def fatie(self,title,body): #发帖模块
    self.login("")
    self.driver.find_element_by_id('subject').send_keys(title)
    el=self.driver.find_element_by_id('e_iframe')
    self.driver.switch_to.frame(el)
    self.driver.find_element_by_xpath('/html/body').send_keys(body)
    self.driver.switch_to.default_content()
    self.driver.find_element_by_id('postsubmit').click()

    def search(self,content):#搜索模块
    self.driver.find_element_by_id('scbar_txt').send_keys(content)
    self.driver.find_element_by_id('scbar_btn').click()

    def personal_center(self): #个人中心模块
    self.driver.find_element_by_xpath('//*[@id="um"]/div/a/img').click() #点头像
    self.driver.find_element_by_xpath('//*[@id="uhd"]/ul/li[1]/a').click() #主题管理

    def news(self):#消息模块
    self.driver.find_element_by_xpath('/html/body/div[6]/div/div[1]/div/p[1]/a[3]').click()
    self.driver.find_element_by_xpath('//*[@id="ct"]/div[1]/div/ul/li[3]/a').click()
    self.driver.find_element_by_xpath('//*[@id="ct"]/div[2]/div[1]/ul/li[3]/a').click()


    if __name__ == '__main__':
    xk=discuz()
    # xk.login('admin','123456')
    # sleep(2)
    # xk.driver.get('http://192.168.203.128/bbs/forum.php?mod=post&action=newthread&fid=2')
    # sleep(2)
    # xk.fatie('徐凯大帅哥','是的,没错')
    # xk.driver.get('http://192.168.203.128/bbs')
    # sleep(3)
    # xk.personal_center()
    # sleep(2)
    #
    # xk.news()
    # sleep(2)
    # xk.driver.get('http://192.168.203.128/bbs')
    # sleep(2)
    # xk.search('徐凯')
    # sleep(2)
    ==================================================================
    二、unittest
    1、介绍单元测试框架
    单元测试框架
    (1)python当总的unittest 框架(讲),pytest框架
    a、unittest框架是python自带的库
    b、pytest框架是python中第三方库
    (2)unittest框架的作用:管理和组织用例

    (3)unittest 框架的格式:
    import  unittest  #导入unittest                                          
    class Uikj(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例)               
        @classmethod                                                       
        def setUpClass(cls) -> None:#类的开始                                  
            print("类的开始")                                                  
        @classmethod                                                       
        def  tearDownClass(cls) -> None: #类的结束                             
            print("类结束")                                                   
                                                                           
        def setUp(self) -> None:                                           
            print("方法的开始")                                                 
        def  tearDown(self) -> None:                                       
            print("方法结束")                                                  
        def  test01(self):                                                 
            print("111")                                                   
        def test03(self):                                                  
            print("333")                                                   
        def test02(self):                                                  
            print("222")                                                   
        def testa(self):                                                   
            print("a")                                                     
        def testA(self):                                                   
            print("A")                                                     
        def dl(self):                                                      
            print("独立")                                                    
    if __name__ == '__main__':                                             
        unittest.main()

    注意点:
    (1)用例执行一定要是test开头;
    (2)用例执行的顺序ascii表排序:0-9,A-Z,a-z
    (3)类的是开始和类的结束,在框架中只运行一次
    (4)方法的开始和方法结束每个用例中都执行
    ================================================
    第二种方法:
    设置环境变量

     


    import  unittest  #导入unittest
    class Uikj(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例)
    @classmethod
    def setUpClass(cls) -> None:#类的开始
    print("类的开始")
    @classmethod
    def tearDownClass(cls) -> None: #类的结束
    print("类结束")

    def setUp(self) -> None:
    print("方法的开始")
    def tearDown(self) -> None:
    print("方法结束")
    def test1(self):
    print("111")
    def test3(self):
    print("333")
    def test2(self):
    print("222")
    def testa(self):
    print("a")
    def testA(self):
    print("A")
    def dl(self):
    print("独立")
    if __name__ == '__main__':
    # unittest.main() #第一种方法调用所有的用例
    tj=unittest.TestSuite()#创建一个套件对象
    # tj.addTest(Uikj("test1")) #添加用例
    tj.addTests([Uikj("test1"),Uikj("test2")])
    r=unittest.TextTestRunner() #创建一个执行对象

    r.run(tj) #运行套件
    ==================================================

    第三种方法:读取路径
    import  unittest  #导入unittest
    class Uikj(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例)
    @classmethod
    def setUpClass(cls) -> None:#类的开始
    print("类的开始")
    @classmethod
    def tearDownClass(cls) -> None: #类的结束
    print("类结束")

    def setUp(self) -> None:
    print("方法的开始")
    def tearDown(self) -> None:
    print("方法结束")
    def test1(self):
    print("111")
    def test3(self):
    print("333")
    def test2(self):
    print("222")
    def testa(self):
    print("a")
    def testA(self):
    print("A")
    def dl(self):
    print("独立")
    if __name__ == '__main__':
    # unittest.main() #第一种方法调用所有的用例
    # tj=unittest.TestSuite()#创建一个套件对象
    # tj.addTest(Uikj("test1")) #添加用例
    # tj.addTests([Uikj("test1"),Uikj("test2")])
    # r=unittest.TextTestRunner() #创建一个执行对象
    #
    # r.run(tj) #运行套件
    #
    lj=r"C:\Users\Administrator\PycharmProjects\gs2\gsml\gs_ui" #相对路径
    d=unittest.TestLoader().discover(start_dir=lj,pattern="ui_kuangjian*.py")#
    r=unittest.TextTestRunner()
    r.run(d)
    
    
    ==================================================
    结合测试报告;
    测试报告模板:





    ==================================================

    总结:
    一、unittest的介绍
    当我们写的用例越来越多时,我们就需要考虑用例编写的规范与组织,以便于后期的维护,而unittest正是这样一款工具
    二、unittest是Python自带的标准库中的模块,其中包括:
    1、TestCase类
    2、TestSuite类
    3、TestLoader类
    4、TextTestRunner类
    5、TextTestResult类
    6、TestFixture类
    解释下:
    TestCase:
    一个Testcase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括初始化setUp、运行run、测试后的还原tearDown
    TestSuite:
    对一个功能的测试往往需要多测试用例的,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中
    TextTestRunner:
    是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在TextTestResult实例中
    TestFixture:
    测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown()。通过覆盖TestCase的setUp和tearDown来实现。
    TestLoader:
    是用来搜索所有以test开头的测试用例,然后将其加入到testsuite中
    图形化解释:如下图


    三、框架的组成
    在写测试类以及测试用例时要规定一个命名习惯,一般测试类可以以Test开头,也可以以Test结尾。测试用例一般是以test开头。
    eg:结构如下:
    import unittest #导入unittest包
    #创建测试类:从unittest.TestCase继承
    classRomanNumeralConverterTest(unittest.TestCase):
    def setUp(self): #初始化测试环境
    def tearDown(self): #还原测试环境
    def test_case(self):测试用例

  • 相关阅读:
    ld: warning: PIE disabled. Absolute addressing (perhaps -mdynamic-no-pic) not allowed in code signed PIE, but used in _ff_h264_decode_mb_cabac from
    关于屏幕旋转的几种情况
    AppCan应用打包关于缺少XMPP的依赖库libresolv.dylib--升级引擎版本到3.1以上
    "_dns_parse_resource_record", referenced from:......
    export IPHONEOS_DEPLOYMENT_TARGET=6.0 .......
    CodeSign error: code signing is required for product type Application in SDK iOS
    Receiver type ‘X’ for instance message is a forward declaration
    uva299
    uva152
    uva10474
  • 原文地址:https://www.cnblogs.com/xiaolehua/p/16362254.html
Copyright © 2020-2023  润新知