zoukankan      html  css  js  c++  java
  • selenium+python自动化测试--读取配置文件(.ini)

    前言:今天为什么要整理读取配置文件呢?原因是:公司正在做的项目,操作页面时都是根据路由跳转,由于自己经验尚浅,将url地址写在每个用例中,导致每次开发一更改路由,我就要去每个页面中修改url地址,光来来回回找页面就很费时间,所以就想到了用配置文件,将所有url地址放在一个文件中,页面用到哪个时读取哪个。

    一、基础了解

    ini

    ini配置文件格式如下:

    ;这里是注释
    
    [section0]
    
    key0 = value0
    key1 = value1
    
    [section1]
    
    key2 = value2
    key3 = value3

    section不能重复,里面数据通过section去查找,每个seletion下可以有多个key和vlaue的键值对,注释用英文分号(;)

    configparser

    通过python3里面自带configparser模块来读取ini文件。

    # python3
    import configParser

    如果注释里面有中文的话,这里代码跟python2是有点区别的,python2里面直接conf.read(cfgpath)就可以了,python3需要加个参数:encoding="utf-8"

    conf.read(cfgpath, encoding="utf-8")

    二、代码编写

    分别在common文件夹下新建配置文件:config.ini 和 读取配置文件:readConf.py ,然后编写代码...

    1、配置文件 :config.ini

    配置文件中按照功能模块分为 risk 、rule 、term ;其下的url地址分别代表该模块下某个功能点的url

    [risk]
    ;新建风险
    url0 = www.baidu.com
    ;新建风险目录、导入风险模板
    url1 = xxxx
    
    [rule]
    ;新建制度目录
    url1 = xxxxx
    ;制度审批任务模板
    url2 = xxxxxxx
    
    
    [term]
    ;新建术语
    url1 = xxxxxx
    ;新建术语目录
    url2 = xxxxxx

    2、读取配置文件 :readConf.py  以下是封装好的读取配置文件的方法

    import configparser
    import os
    
    class ReadConf():
        def __init__(self):
            curpath = os.path.dirname(os.path.relpath(__file__))
            #获取配置文件路径
            cfgpath = os.path.join(curpath, "config.ini")
    
            # 创建管理对象
            self.conf = configparser.ConfigParser()
            # 读ini文件
            self.conf.read(cfgpath, encoding="utf-8")
    
        def readConf(self,param):
            #获取所有的section
            # sections = self.conf.sections()
            # print(sections)
            #获取某个sections中的所有值,将其转化为字典
            items = dict(self.conf.items(param))
            return items
    
    if __name__ == '__main__':
        test = ReadConf()
        t = test.readConf("risk")   #传入sections的值
        print('我取某个sections下所有值 ',t)
        print(t['url1'])

    3、用例编写

    优化前代码:

    import unittest
    from pages.risk.createRisk import CreateRisk
    from selenium import webdriver
    import time
    
    base_url = "xxxx"
    
    class TestCreateRisk(unittest.TestCase):
    
        @classmethod
        def setUpClass(cls):
            cls.driver = webdriver.Chrome()
            cls.driver.maximize_window()
            cls.risk = CreateRisk(cls.driver)
    
        def setUp(self):
            self.driver.get(base_url)
    
        def tearDown(self):
            self.driver.delete_all_cookies()
    
        @classmethod
        def tearDownClass(cls):
            cls.driver.quit()
    
        def test_create_risk(self):
            '''新建风险点'''
            random = self.risk.get_random_chinese()
            self.risk.createRisk(random)
            time.sleep(3)
    
    
    if __name__ == '__main__':
        unittest.main()

    优化后代码:

    import unittest
    from pages.risk.createRisk import CreateRisk
    from selenium import webdriver
    from common.readConf import ReadConf
    import time
    
    class TestCreateRisk(unittest.TestCase):
    
        @classmethod
        def setUpClass(cls):
            cls.driver = webdriver.Chrome()
            cls.driver.maximize_window()
            cls.risk = CreateRisk(cls.driver)
            # 读取配置文件,传入sections值,
            cls.url = ReadConf()
            cls.standard_url = cls.url.readConf('risk') #这里传入risk模块
            # 获取配置文件中的url
            cls.base_url = cls.standard_url['url0'] #这里传入risk模块中新建风险的url
            print(cls.base_url)
    
        def setUp(self):
            self.driver.get(self.base_url)
    
        def tearDown(self):
            self.driver.delete_all_cookies()
    
        @classmethod
        def tearDownClass(cls):
            cls.driver.quit()
    
        def test_create_risk(self):
            '''新建风险点'''
            random = self.risk.get_random_chinese()
            self.risk.createRisk(random)
            time.sleep(3)
    
    
    if __name__ == '__main__':
        unittest.main()

    经过修改后,每次更新url地址,只需在配置文件中修改就好了,是不是方便多了~~

  • 相关阅读:
    [LeetCode] Reverse Linked List II 解题报告
    [LeetCode] Search for a Range 解题报告
    Git教程
    今天使用VS2012遇到一个问题:"链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的"
    套接字的域和地址族
    套接口和I/O通信
    2010年第82届奥斯卡金像奖获奖影片名单
    恩信ERP7.10安装、定制和二次开发 (2)
    从 Google 代码库找到的好东西 [转]
    更自然的人机交互——2010微软技术节现场速递
  • 原文地址:https://www.cnblogs.com/yudx/p/11413990.html
Copyright © 2011-2022 走看看