Python + Selenium自动化测试 -- 第一次框架设计(上)

本文介绍了使用Python和Selenium构建自动化测试框架的过程,包括配置文件管理、报告和日志输出、自定义库封装、测试脚本以及第三方插件的整合。特别提到了unittest测试框架,阐述了setUp和tearDown方法以及以test开头的测试用例函数。项目中,通过创建特定文件目录结构,实现了测试脚本的组织,并展示了如何生成日志文件。
摘要由CSDN通过智能技术生成

自动化测试框架:
1、基本组件:
1)配置文件管理
2)报告和日志文件输出
3)自定义库的封装(如:自定义搜索引擎类)
4)测试脚本文件(测试用例文件)
5)第三方插件
6)持续集成(git,svn,ant,maven,jenkins,我们会把这整合到jenkins,达到持续集成,一键执行测试脚本。)
这里写图片描述

下面简单介绍一下unittest测试框架:
unittest是一个单元测试框架,是Python编程的单元测试框架。共享测试用例中的初始化和关闭退出代码,最小单元是test,即一个测试用例
1)测试固件
包含“测试代码之前的准备部分”setUp()和“测试结束之后的清扫代码”tearDown()
2)测试用例
以test开头的函数

下面开始项目:
代码参考链接:first_framework_demo
新建项目,创建文件目录如下:
这里写图片描述

1)配置文件config.ini:

# -*- coding:utf-8 -*-
; 中文注释
[browserType]
;browserName = Firefox
browserName = Chrome
;drowserName = IE

[testServer]
URL = https://www.baidu.com
;URl = www.goole.com

2)logger.py文件:

import logging
import os.path
import time


class Logger(object):

    def __init__(self, logger):
        '''
        指定保存日志的文件路径,日志级别以及调用文件
        将日志存入到指定的文件中
        :param logger:
        '''

        # 创建一个logger
        self.logger = logging.getLogger(logger)
        self.logger.setLevel(logging.DEBUG)

        # 创建handler,写入日志文件
        rq = time.strftime('%Y%m%d%H%M',time.localtime(time.time()))
        log_path = os.path.dirname(os.path.abspath('.')) + '/logs/' + rq + '.log'
        fh = logging.FileHandler(log_path)
        fh.level = logging.INFO

        # 创建handler, 用于输出控制台
        ch = logging.StreamHandler()
        ch.level = logging.INFO

        # 定义handler的输出格式
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        fh.formatter = formatter
        ch.formatter = formatter

        self.logger.addHandler(fh)
        self.logger.addHandler(ch)

    def getlog(self):
            return self.logger

3)brower_engine.py文件:

"""
浏览器引擎类
"""
import configparser
import os.path
from selenium import webdriver
from framework.logger import Logger

logger = Logger(logger="BrowserEngine").getlog()


class BrowserEngine(object):

    def __init__(self, driver):
        self.driver = driver

    def open_browser(self):

        config = configparser.ConfigParser()
        file_path = os.path.dirname(os.path.abspath('.')) + '\config\config.ini'
        print(file_path)
        # 但是对于有BOM(如Windows下用记事本指定为utf-8)的文件,需要使用 utf-8-sig, 使用utf-8没办法。
        # 【我没试过,http://blog.csdn.net/liujingqiu/article/details/77677256】
        # 对于我写的代码 此处是utf-8-sig 或者 utf-8 都可以
        config.read(file_path,encoding="utf-8")

        browser = config.get("browserType", "browserName")
        logger.info("You had select %s browser." % browser)
        url = config.get("testServer", "URL")
        logger.info("The test server url is: %s" % url)

        if browser == "Firefox":
            self.driver = webdriver.Firefox()
            logger.info("firefox.")
        elif browser == "Chrome":
            self.driver = webdriver.Chrome()
            logger.info("Chrome.")
        elif browser == "IE":
            self.driver = webdriver.Ie()
            logger.info("Ie.")

        self.driver.get(url)
        logger.info("Open url: %s" % url)
        self.driver.maximize_window()
        logger.info("Maximize the current window.")
        self.driver.implicitly_wait(10)
        logger.info("Set implicitly wait 10 seconds.")
        # self.driver = driver
        return self.driver

    def quit_browser(self):
        self.driver.quit()
        logger.info("Now, Close and quit the browser.")

4) baidu_homepage.py暂时为空
5)testsuits/baidu_search.py

"""
测试脚本
"""
import time
import unittest
from framework.brower_engine import BrowserEngine

"""
unittest
一个单元测试框架
共享测试用例中的初始化和关闭退出代码
最小单元是test,即一个测试用例
1)测试固件
包含“测试代码之前的准备部分”setUp()和“测试结束之后的清扫代码”tearDown()
2)测试用例
以test开头的函数
"""


class BaiduSearch(unittest.TestCase):

    def setUp(self):
        """
        前提准备工作
        :return:
        """
        self.engine = BrowserEngine.__new__(BrowserEngine)
        self.driver = self.engine.open_browser()


    def tearDown(self):
        """
        测试结束后的操作
        :return:
        """
        self.engine.quit_browser()
        # self.driver.quit()

    def test_baidu_search(self):
        self.driver.find_element_by_id('kw').send_keys("胡歌")
        time.sleep(1)
        try:
            assert '胡歌' in self.driver.title
            print('测试通过.')
        except Exception as e:
            print('测试失败.', format(e))


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

运行测试脚本baidu_search.py,会在根目录下的logs文件生成日志文件.
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值