Python-动态获取项目路径

项目路径:就是你在哪个目录下打开的pycharm,这个目录就是你项目路径。

导入包的时候就是从该目录下开始导入。

项目框架如下图所示:

没有获取动态目录之前,我们在测试用例读取excel内容时需要写上绝对路径,如果在多个py文件中都这样定义,excel文件路径发生变化时,维护起来相对麻烦,接下来就来看下如何动态获取文件路径? test.login.py内容如下:

import unittest
from funcs import login
from common.excel import read_excel
from ddt import ddt, data


# r :不转义
file_path = rD:PycharmProjects框架搭建datacases.xlsx
excel_data = read_excel(file_path, Sheet1)

@ddt
class TestLogin(unittest.TestCase):

    @data(*excel_data)
    def test_login(self, row):
        # row表示每次从data这个list当住取出一个数据
        # 代表一组测试数据,相当于for row in data
        # 但不同点在于:会自动生成一个新的测试用例方法test_login_1()
        params_str = row[data]
        params = eval(params_str)
        username = params[username]
        pwd = params[pwd]
        expected = eval(row[expected])
        actual = login(username, pwd)
        self.assertEqual(expected, actual)

动态获取文件路径,使用py文件作为配置文件相对简单,直接导入变量就可以,且该项目是基于python的,我们在config目录下创建config.py文件,实现动态获取excel文件的路径:

import os

# 获取当前文件的绝对路径
current_file = os.path.abspath(__file__)
# print(current_file)
# 获取当前文件所在目录
current_dir = os.path.dirname(current_file)
# print(current_dir)
# 获取当前文件所在项目
current_obj = os.path.dirname(current_dir)
# print(current_obj)
# 获取测试数据的所在目录
config_dir = os.path.join(current_obj, data)
# 获取cases.xlsx文件的绝对路径
config_file = os.path.join(config_dir, cases.xlsx)
# print(config_file)

可以看出我们在config.py内定义了多个变量进行动态获取目录及文件的绝对路径,我们可以打印出各变量的具体输出内容:

此时,test.login.py可以修改为:

import unittest
from funcs import login
from common.excel import read_excel
from ddt import ddt, data
from config.config import config_file

# r :不转义
# file_path = rD:PycharmProjects框架搭建datacases.xlsx
# excel_data = read_excel(file_path, Sheet1)
excel_data = read_excel(config_file, Sheet1)


@ddt
class TestLogin(unittest.TestCase):

    @data(*excel_data)
    def test_login(self, row):
        # row表示每次从data这个list当住取出一个数据
        # 代表一组测试数据,相当于for row in data
        # 但不同点在于:会自动生成一个新的测试用例方法test_login_1()
        params_str = row[data]
        params = eval(params_str)
        username = params[username]
        pwd = params[pwd]
        expected = eval(row[expected])
        actual = login(username, pwd)
        self.assertEqual(expected, actual)
经验分享 程序员 微信小程序 职场和发展