python自动化测试实现一次性执行多个用例

本文介绍了一种使用unittest框架进行自动化测试的方法,通过编写多个测试用例并利用discover方法批量执行,实现了对登录功能和主界面功能的自动化测试,并在测试过程中自动生成截图,方便后续的错误排查。

编写了很多个测试用例,可以一次性全部执行并且实现截图

在自学测试时,发现自动化测试需要写很多个测试用例并且自己只能实现单个执行。于是找到了可以同时执行的方法

unittest.defaultTestLoader.discover'用例存放的目录', pattern='匹配的文件条件')

下面附上完整代码,包括两个用例模块,一是对登录功能的测试(test_login.py),二是对主界面功能的测试(test_mian.py)以及执行用代码(run_all_case.py)

# 用户登录测试

# coding:utf-8

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import unittest

import time


class  login_case(unittest.TestCase):


    def setUp(self):
        print('开始测试登录模块')


        # 定义登录方法 主体

    def login(self, username, password):

        self.web = webdriver.Ie("D:\个人应用\python\IEDriverServer.exe")

        self.web.get("http://10.116.254.230/")  # 登录页面 例如https://www.baidu.com

        self.web.maximize_window()

        # 定位元素 打开登录页根据网站实际操作去定位登录元素

        # self.web.find_element_by_class_name('register_login_btn').click()

        self.web.find_element_by_css_selector("input[type='text']").send_keys(username)  # 定位元素  用户名

        self.web.find_element_by_css_selector("input[type='password']").send_keys(password)  # 定位元素  密码

        self.web.find_element_by_css_selector("button").send_keys(Keys.ENTER)


    def test_login_success(self):
        # '''用户名、密码正确'''

        self.login('admin', '123456')  # 正确用户名和密码
        
        self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\login\\test_login_success.png")


    def test_login_pwd_error(self):
        # 用户名正确、密码不正确

        self.login('admin', '1')  # 正确用户名,错误密码

        error_message = self.web.find_element_by_css_selector("[class='title']>span").text

        self.assertIn('登录失败', error_message)  # 用assertIn(a,b)方法来断言 a in b  '用户名或密码错误'在error_message里

        self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\login\\login_pwd_error.png")


    def test_login_pwd_null(self):
    # 用户名正确、密码为空

        self.login('admin', '')  # 密码为空

        # 等待时间手动处理。

        error_message = self.web.find_element_by_css_selector("[class='title']>span").text

        self.assertIn('登录失败', error_message)  # 用assertIn(a,b)方法来断言 a in b  '用户名或密码错误'在error_message里

        self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\login\\login_pwd_null.png")


    def test_login_user_error(self):
        # 用户名错误、密码正确

        self.login('admins', '123456')  # 密码正确

        # 等待时间手动处理。

        error_message = self.web.find_element_by_css_selector("[class='title']>span").text

        self.assertIn('登录失败', error_message)  # 用assertIn(a,b)方法来断言 a in b  '用户名或密码错误'在error_message里

        self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\login\\test_login_user_error.png")


    def test_login_user_null(self):
        # 用户名为空、密码正确

        self.login('', '123456')  # 用户名为空,密码正确

        # 等待时间手动处理。

        error_message = self.web.find_element_by_css_selector("[class='title']>span").text

        self.assertIn('登录失败', error_message)  # 用assertIn(a,b)方法来断言 a in b  '用户名或密码错误'在error_message里

        self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\login\\test_login_user_null.png")


    def tearDown(self):
        print('完成测试')

        self.web.quit()


if __name__ == "__main__":
    unittest.main()

下面是主页面模块测试


# 系统模块测试



from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import unittest

import time



class personalCenter_case(unittest.TestCase):



    def setUp(self):

        print('开始测试系统模块')

        url = "http://10.116.254.230/"

        self.web = webdriver.Ie("D:\个人应用\python\IEDriverServer.exe")

        self.web.implicitly_wait(10)

        self.web.maximize_window()  # 浏览器最大化

        self.web.get(url)  # 登录页面 例如https://www.baidu.com

        # self.web.find_element_by_class_name('register_login_btn').click()

        self.web.find_element_by_css_selector("input[type='text']").send_keys('admin')  # 定位元素  用户名

        self.web.find_element_by_css_selector("input[type='password']").send_keys('123456')  # 定位元素  密码

        self.web.find_element_by_css_selector("button").send_keys(Keys.ENTER)



    def test_person_add(self):

        self.web.implicitly_wait(10)

        button = self.web.find_element_by_xpath("//div[@class='header-ipc']//li[5]")

        self.web.execute_script("$(arguments[0]).click()", button)

        time.sleep(1)

        self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\person\\test_person.png")

        self.web.find_element_by_xpath("//div[@class='left-menu']//div[3]//div").click()

        button = self.web.find_element_by_xpath("//div[@class='left-menu']//div[3]//ul/li[2]")

        self.web.execute_script("$(arguments[0]).click()", button)

        self.web.find_element_by_xpath("//div[@class='operation']/button[2]").send_keys(Keys.ENTER)

        self.web.find_element_by_xpath("//div[@class='add-form']//div[1]//input").send_keys('test2')

        self.web.find_element_by_xpath("//div[@class='add-form']/form/div[3]//input").send_keys('123456')

        self.web.find_element_by_xpath("//div[@class='add-form']/form/div[4]//input").send_keys('abcdefg')

        self.web.find_element_by_xpath("//div[@class='add-form']/form/div[6]//input").send_keys('abcdefg')

        self.web.find_element_by_xpath("//div[@class='add-form']/form/div[3]//input").send_keys('123456')

        self.web.find_element_by_xpath("//div[@class='user-manage']/div[4]/div/div[3]//button[1]").send_keys(Keys.ENTER)

        time.sleep(2)

        self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\person\\test_person_add.png")

    # def test_person_show(self):
    #
    #     self.web.implicitly_wait(10)
    #
    #     button = self.web.find_element_by_xpath("//div[@class='header-ipc']//li[5]")
    #
    #     self.web.execute_script("$(arguments[0]).click()", button)
    #
    #     time.sleep(1)



    def tearDown(self):

        print('完成测试')

        self.web.quit()

最后是执行代码,因为我的文件都是以test开头,所以在匹配的文件条件上选择了pattern=test*.py,这样可以搜索到所有以test开头的py文件

# coding:utf-
# 将所有测试用例一次性执行
# import os 可以导入相对路径

import unittest

import os


# 待执行用例的目录

def allcase():
    case_dir = r"C:\Users\QQ\PycharmProjects\untitled"

    # 相对路劲的设置方式

    # case_path=os.path.join(os.getcwd(),"case")

    testcase = unittest.TestSuite()

    # 执行所有以test开头的py文件

    discover = unittest.defaultTestLoader.discover(case_dir, pattern='test*.py')

    # discover方法筛选出来的用例,循环添加到测试套件中

    # print(discover)

    for test_suite in discover:

        for test_case in test_suite:
            # 添加用例到testcase

            print(test_case)

            testcase.addTest(test_case)

    return testcase


if __name__ == "__main__":
    runner = unittest.TextTestRunner()

    runner.run(allcase())




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值