一文带你了解UI自动化测试框架

Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构

1、Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用

------login_business.py


from Page_Object.Common_Page.login_page import Login_Page
from HTMLReport import logger
import time


def login(driver, username, password):
    """
    登录业务
    :param driver:浏览器驱动
    :param username:用户名
    :param password:密码
    :return:None
    """
    logger().info(f"使用用户名:{username},密码:{password}进行登陆")
    login_page = Login_Page(driver)
    login_page.send_username(username)
    login_page.send_password(password)
    login_page.submit()
    time.sleep(2)

----Base_url.py:对应的url地址

2、Common:与业务无关的公共模块,如对Selenium的二次封装,方便后期的调用,还有一些工具类,如在读取数据时需要对读取文件进行封装

3、PageOBject:这个就应该不用多说了,页面元素的封装,这个根据自己公司系统的业务去做分层封装(不做过多解释)

4、report:测试报告

5、TestCase:测试用例层,下面以logincase为例子

---logincase.py

import unittest
from Business.Base_url import url_index
import ddt
from Common.tools.read_txt import read_txt
from HTMLReport import logger
from Page_Object.Common_Page.index_page import Index_Page
from Common.selenium_library import SeleniumBase
from Business.login_business import login


@ddt.ddt
class Test_login(unittest.TestCase):

    def setUp(self):
        self.driver = SeleniumBase().get_web_driver()

    def tearDown(self):

        SeleniumBase(self.driver).quit()

    @ddt.unpack
    @ddt.data(*read_txt('TestData/login_user_password.txt'))
    def test_login(self, username, password, assert_type):
        se = SeleniumBase(self.driver)
        se.get(url_index)
        login(self.driver, username, password)
        se.add_page_screen_shot()

        if assert_type == '1':
            logger().info("断言登陆成功")
            text = Index_Page(self.driver).login_success()

            self.assertIn("测试", text, '登陆成功断言')

        elif assert_type == "2":
            text = self.driver.find_element_by_id("submit").text
            self.assertIn("立即登录", text, '登陆失败断言')

        elif assert_type == "3":
            text = self.driver.find_element_by_id("submit").text
            self.assertIn("立即登录", text, '登陆失败断言')

        elif assert_type == "4":
            text = self.driver.find_element_by_id("submit").text
            self.assertIn("立即登录", text, '登陆失败断言')

        else:
            logger().info(f"未知断言类型{assert_type}")
            self.assertTrue(False, "未知断言类型")

6、TestData:测试数据,对应用例的数据都是在这里去取

7、TestSuite:测试套件,以登录套件为例

---loginsuite.py

import unittest

from TestCase.LoginCase import login_case


def return_suite():
    suite=unittest.TestSuite()

    loader=unittest.TestLoader()

    suite.addTests(loader.loadTestsFromTestCase(login_case.Test_login))

    return suite

8、browser.ini:浏览器配置文件

[local]
local_browser = False
wait_time = 10

[browser]
name = chrome
;name = firefox
;name = ie
window_width =
window_height =

[grid]
command_executor = http://127.0.0.1:4444/wd/hub
headless = False
proxy =

9、run.py:整体运行文件

import unittest
from TestSuite.LinesSuite import lines_suite
from TestSuite.LinesSuite import itinerary_suite

import HTMLReport

suite = unittest.TestSuite()

# suite.addTests(login_suite.return_suite())
suite.addTests(lines_suite.return_suite())
suite.addTests(itinerary_suite.return_suite())

HTMLReport.TestRunner(
    report_file_name="test",
    title='WEB UI 自动化',
    description='登陆',
    thread_count=3
).run(suite)


10、整体框架结构图:

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark是一个快速通用的集群计算框架,它可以处理大规模数据,并且具有高效的内存计算能力。Spark可以用于各种计算任务,包括批处理、流处理、机器学习等。本文将了解Spark计算框架的基本概念和使用方法。 一、Spark基础概念 1. RDD RDD(Resilient Distributed Datasets)是Spark的基本数据结构,它是一个分布式的、可容错的、不可变的数据集合。RDD可以从Hadoop、本地文件系统等数据源中读取数据,并且可以通过多个转换操作(如map、filter、reduce等)进行处理。RDD也可以被持久化到内存中,以便下次使用。 2. Spark应用程序 Spark应用程序是由一个驱动程序和多个执行程序组成的分布式计算应用程序。驱动程序是应用程序的主要入口点,它通常位于用户的本地计算机上,驱动程序负责将应用程序分发到执行程序上并收集结果。执行程序是运行在集群节点上的计算单元,它们负责执行驱动程序分配给它们的任务。 3. Spark集群管理器 Spark集群管理器负责管理Spark应用程序在集群中的运行。Spark支持多种集群管理器,包括Standalone、YARN、Mesos等。 二、Spark计算框架使用方法 1. 安装Spark 首先需要安装Spark,可以从Spark官网下载并解压缩Spark安装包。 2. 编写Spark应用程序 编写Spark应用程序通常需要使用Java、Scala或Python编程语言。以下是一个简单的Java代码示例,用于统计文本文件中单词的出现次数: ```java import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import java.util.Arrays; import java.util.Map; public class WordCount { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("WordCount").setMaster("local"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD<String> lines = sc.textFile("input.txt"); JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator()); Map<String, Long> wordCounts = words.countByValue(); for (Map.Entry<String, Long> entry : wordCounts.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); } sc.stop(); } } ``` 3. 运行Spark应用程序 将编写好的Spark应用程序打包成jar包,并通过以下命令运行: ```bash spark-submit --class WordCount /path/to/wordcount.jar input.txt ``` 其中,--class参数指定应用程序的主类,后面跟上打包好的jar包路径,input.txt是输入文件的路径。 4. 查看运行结果 Spark应用程序运行完毕后,可以查看应用程序的输出结果,例如上述示例中的单词出现次数。 以上就是Spark计算框架的基本概念和使用方法。通过学习Spark,我们可以更好地处理大规模数据,并且提高计算效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值