Python 测开入门篇《环境管理、编码规范、项目结构》

清菡 · 2020年12月13日 · 最后由 清菡 回复于 2020年12月30日 · 3119 次阅读

坚持原创输出,点击蓝字关注我吧

作者:清菡
博客:oschina、云 + 社区、知乎等各大平台都有。

目录

  • 一、前提准备
  • 二、虚拟环境
    • 1.virtualenv 的安装和应用
    • 2.pipenv 的安装和使用
    • 3.导出虚拟环境为 requirements.txt 文件
    • 4.pipenv 的相关使用命令
    • 5.需要在虚拟环境中起项目
  • 三、Python 代码规范
  • 四、工程结构化

测试平台是做什么的?

测试开发研发的测试平台是给点点点的人用的,可以帮助我们做自动化测试、用例管理、报表生成等,提高测试工作效率。

例如用市面上的 postman 做的一些测试,不符合公司项目的实际。但是自动化测试平台可以根据公司实际项目需求做定制化开发。

一、前提准备

Python 环境:python3.7 是 python3 里面目前最稳定的一个版本,3 以上的版本都没有问题。

电脑:Windows10 家庭版

二、虚拟环境

Python 虚拟环境的主要目的是:为了给不同的工程创建互相独立的运行环境。在虚拟环境下,每一个工程都有自己的依赖包,而与其它的工程无关。

不同的虚拟环境中同一个包可以有不同的版本。并且,虚拟环境的数量没有限制,我们可以轻松地用 virtualenv 或 pipenv 等工具来创建多个虚拟环境。

图片来自网络

1.virtualenv 的安装和应用

(windows) 安装步骤:

1.pip 安装 virtualenv

pip install virtualenv

2.pip 安装虚拟环境管理包

pip install virtualenvwrapper-win(这个是 windows 下的管理工具)

注意:如果是用的 mac 或者在 linux 上安装,直接pip install virtualenvwrapper即可。

3.创建一个存放虚拟环境的目录(建议命名为.env 或者.virtualenv,也可以叫其它名字,注意不要中文命名)。

4.配置环境变量(变量名:WORKON_HOME,值:上面创建的目录路径)

查看电脑中的虚拟环境,输入workon,会显示所有的虚拟环境:

创建虚拟环境有一些命令,virtualenv 的使用命令:

wokon 列出所有的虚拟环境
workon[name] 进入指定的虚拟环境
deactivate 退出当前的虚拟环境
mkvirtualenv[name] 创建虚拟环境
rmvirtualenv[name] 删除虚拟环境

包安装:

虚拟环境中,安装对应的依赖包,进入虚拟环境直接使用pip install进行安装。

mkvirtualenv -p python3 qinghan

如果电脑里只安装了 python3,那么直接输入mkvirtualenv qinghan

后面你看到多了这个虚拟环境名,创建虚拟环境后会自动进入虚拟环境里面。

先输入exit();再输入deactivate

进入某个虚拟环境,可以这样输入:例如workon qinghan

删除某个虚拟环境,可以这样输入:rmvirtualenv tester

输入pip list可查看当前电脑已安装的 python 相关的依赖包。

查看虚拟环境中有多少依赖包:

先输入workon qinghan再输入pip list

在 qinghan 这个虚拟环境中安装一个 django 包:

pip install django

这个包在其它虚拟环境中是看不到的,独立隔开的。

卸载包pip uninstall django

使用 virtualenv 这个管理工具有个缺点:

安装 django 的时候,会把 django 相关的依赖包都安装下来。安装 django 的时候自带安装的pytzsqlparse包,卸载的时候并没有卸载。

2.pipenv 的安装和使用

pipenv 集成了 pip,virtualenv 两者的功能,且完善了两者的一些缺陷。

过去用 virtualenv 管理 requirements.txt 文件可能会有问题,Pipenv 使用 Pipfile 和 Pipfile.lock。

Pipfile 文件用来记录项目依赖包列表,Pipfile.lock 文件记录了固定版本的详细依赖包列表,查看依赖关系是十分方便。

支持 python2 和 python3。支持 mac,win,linux,在各个平台的命令都是一样的。各个地方使用了哈希校验,无论安装还是卸载包都十分安全。

安装:pip install pipenv

创建虚拟环境

第一步创建文件夹 mkdir py3env
第二步进入文件夹 cd py3env
第三步初始化虚拟环境 pipenv install

创建好虚拟环境后会生成:一个 Pipfile 文件和一个 Pipfile.lock。

项目提交时,可将 Pipfile 文件和 Pipfile.lock 文件一并提交,待其他开发克隆下载。

Pipfile.lock 文件是通过 hash 算法将包的名称和版本,及依赖关系生成哈希值,可以保证包的完整性。

Pycharm 会自动定位到当前工程的路径下面:

我这里是前面已经安装过了。装好之后,不需要配置环境变量,直接就可以用了。

在工程里创建虚拟环境,直接在工程里面输入pipenv install

这里默认的是 python37,所以使用默认的 python37 解释器创建虚拟环境。

pipenv 管理模块和包

在虚拟环境中安装模块或者包 pipenv install 包名(注意在当前项目路径下执行以上命令)

通过–-dev指明只安装在开发环境中(开发环境是你当前开发的环境,生产环境是上线部署的实际环境)

pipenv install requests --dev

安装包记录是在 [dev-packages] 部分,或是 [packages] 部分。

在安装时,指定–-dev参数,则只安装 [dev-packages] 下的包;若安装时不指定–-dev参数,只会安装 [packages] 包下面的模块。

卸载虚拟环境的模块包 pipenv uninstall 包名
查看安装包及依赖关系 pipenv graph
生成 requirements.txt 文件 pipenv lock -r --dev > requirements.txt
通过 requirements.txt 安装环境 pipenv install -r requirements.txt

pipenv install 有 3 个作用:

1.当前路径下不存在虚拟环境,它就创建虚拟环境。

2.pipenv install 相关模块名,比如pipenv install requests那么它就是安装一个 requests 模块的意思。

3.url = "https://pypi.org/simple"是国外源,需换成 Python 国内源:清华大学源https://pypi.tuna.tsinghua.edu.cn/simple

现在安装个包:pipenv install requests

安装的时候,会默认把安装的包记录在 [packages] 下面:

如果想安装某个包只想在开发环境下用,不想放在 [packages] 下面,可以放在 [dev-packages] 下面,可通过--dev指定一下:

一个 Pipfile 文件和一个 Pipfile.lock 这两个文件,是用来记录当前环境下的相关的依赖包的,以及在服务器上恢复环境用的。

Pipfile.lock 这个文件记录的更完整,比如在虚拟环境中安装了requests了,但是requests有依赖其它的包吗?那就记录在 Pipfile.lock 文件里面。Pipfile.lock 这个文件不可随意修改!

Pipfile.lock 文件这个记录的很准确很详细:

比如在这个工程下开发了一个项目,那么接下来要把这个项目部署到服务器里面,Pipfile.lock 文件和项目代码一起传到服务器上面去。

在服务器上通过 Pipfile.lock 文件可以恢复当前开发的环境,通过对应的命令可以进行恢复。

在哪个路径下运行pipenv这个命令,那么就默认在哪个路径下面创建虚拟环境。

Pipfile 文件中这里是可以修改的:

安装的包,要在服务器上用的话,那就装在 [packages] 里,如果只是开发环境用的话就装在 [dev-packages]

= "*" 这个不用管什么意思。

要在 class_01day 文件夹里面再创建一个虚拟环境,把 Pipfile 文件和 Pipfile.lock 文件复制过来。把项目上传到服务器的时候,同样也把这 2 个文件拿到服务器里面来。

比如服务器下面的工程是 class_01day,是服务器下面项目的一个路径。

在服务器下面恢复当前代码运行的环境,进入路径下面,运行命令pipenv install创建个虚拟环境就可以了。

注意:不是只复制这 2 个文件就行了啊。要把项目代码和这 2 个文件一起传过去。通过这 2 个文件可以把开发时候的所有的环境恢复到服务器上面。

查看当前虚拟环境下已经安装好的依赖包:

pipenv graph

开发环境里面的包是不会恢复进去的。

之前在 test_01 文件夹下的 Pipfile 文件里手动添加的flask = "*"

在把这 2 个文件复制到 python_ck01 文件夹下,恢复的时候会自动化安装 [packages] 下面的包。

也可以把 [dev-packages] 的包恢复进来,输入命令pipenv install --dev

pipenv 这个工具比 virtualenv 强大一些。pipenv 是对 virtualenv 的一个封装。

在环境里如果要卸载相关的依赖包,例如卸载requestsrequests下面有 4 个相关的依赖包。

这里卸载requests,会把requests下面依赖的包也会进行卸载。而 virtualenv 卸载的时候只会卸载requestsrequests对应的依赖它是不会卸载的。

卸载命令:pipenv uninstall requests

一个虚拟环境只能装一个requests

requests 和依赖包的关系,requests 是依赖这些模块实现的:

只能通过 graph 这个看,不能通过 json 文件看。

卸载requests后,它的相关依赖是保存下来了,这些包掉到外面来。

但是将这 2 个文件拷贝到服务器里面去,在恢复的时候,那么它所依赖的包是不会恢复进去的。

如果使用 virtualenv 这个工具,virtualenv 也可以把虚拟环境导出来。

比如把 requests 卸载了,用 virtualenv 导出来的相关环境,去服务器上进行恢复的时候,requests 虽然没有了,但是 requests 下面的依赖包也会恢复进去。

导出 virtualenv 相关的依赖包,可以导出一个 requirements.txt 文件,用的 virtualenv 肯定有这个文件。

3.导出虚拟环境为 requirements.txt 文件

requirements.txt 文件,里面记录了当前程序的所有依赖包及版本号。

其作用是用来在另一个环境上重新构建项目所需要的运行环境依赖。

导出当前环境到 requirements.txt pip freeze > requirements.txt
使用 requirements.txt 恢复环境 pip install -r requirements.txt

拿到这个文件,也可以恢复到服务器上去。

pipenv 可以通过 Pipfile 和 Pipfile.lock 文件进行环境恢复。也可以通过requirements.txt进行环境恢复。

4.pipenv 的相关使用命令

pipenv –rm 删除虚拟环境
pipenv –where 列出本地工程路径
pipenv –venv 列出虚拟环境路径
pipenv –py 显示 Python 解释器信息
pipenv graph 查看包依赖
pipenv lock 生成 lock 文件
pipenv –rm 删除虚拟环境
pipenv shell 直接进入虚拟环境
exit 退出虚拟环境

pipenv 是对 virtualenv 的封装。pipenv 的底层还是 virtualenv 和 pip 实现的。
pipenv 集成了 virtualenv 和 pip 两个工具。

virtualenv 只能通过 requirements.txt 进行环境恢复。

通过 virtualenv,不用看当前所在的路径,通过命令操作所有的虚拟环境。

通过 pipenv,这个命令只能操作当前所在目录下的虚拟环境。

删除完虚拟环境,Pipfile 和 Pipfile.lock 文件以及文件夹不会被删除,需要我们手动来删除。

通过 virtualenv 创建的可以这样删除:

rmvirtualenv fff

通过pipenv --where列出当前虚拟环境所在的目录。

虚拟环境是存放在 virtualenv 下面的。查看当前虚拟环境存放在哪,输入命令pipenv --venv

卸载了某些包,可以通过pipenv lock这个命令重新生成 lock 文件。

现在这个 lock 文件是同步生成的。如果把 lock 文件删除了,可以通过这个命令生成 lock 文件。

5.需要在虚拟环境中起项目

如果没进入虚拟环境,就没有相关的依赖包,启动项目就启动不了。

三、Python 代码规范

1.pep8(python 代码样式规范)

文档地址(中文):

https://blog.csdn.net/ratsniper/article/details/78954852

2.pep257 (python 文档字符串相关的约定):

文档地址:

https://github.com/qiuxiang/pep/blob/master/peps/257.md

3.pep20(python 代码的理念):

文档地址:

https://www.python.org/dev/peps/pep-0020/

重点:

图片来自网络

调整代码格式:Ctrl+Alt+L

注释:

图片来自网络

图片来自网络

模块和包相关规范:

图片来自网络

命名规范:

图片来自网络

四、工程结构化

代码要写得简洁明了,项目里面的结构也得简洁明了,别人点开项目文件就知道哪个文件里面放的什么东西。

结构介绍:

图片来自网络

一个项目里肯定有其它的文件夹,但是一个项目里有这些文件夹,显得规范一些,哈哈哈。


公众号 "清菡软件测试" 首发,更多原创文章:清菡软件测试 105+ 原创文章,欢迎关注、交流,禁止第三方擅自转载。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 6 条回复 时间 点赞

规范写得挺全的,不错。个人经验,其实与其给非常多的规范约束,不如直接搞个脚手架仓库,让大家基于脚手架来扩展添加自己的业务功能,用起来更方便?用的人只要都是模仿已有的写法去延续,那风格就会保持一致,基本上这个脚手架就能保障大家是按照这些相对规范的写法来写自己的项目。

PS:项目结构里面,sample 存放项目的核心代码应该不是规范吧。我接触的项目,sample 一般是放示例项目用的。

基础好文,订

路小圣 回复

谢谢 好的 我已经开通专栏了 可以去我专栏看 另 testerhome 文章较少 去我的公众号《清菡软件测试》,可以看到 100 多篇原创文章

陈恒捷 回复

好的 谢谢您的建议 学到了 我已经开通专栏了 可以去我专栏看 另 testerhome 文章较少 去我的公众号《清菡软件测试》,可以看到 100 多篇原创文章 欢迎指点

谢谢,楼主,受益匪浅。我想问下楼主大佬,如果我想把本地的代码部署到 liunx 的测试环境,只要执行 pip install -r requirements.txt 这个命令,还是需要重新先安装一个虚拟环境啊?

应该是先搞个虚拟环境的,不然怎么起项目呢,你先尝试一下

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册