|
|
## python项目开发&管理
|
|
|
* 基础环境管理
|
|
|
* 编码规范&规范化
|
|
|
* 单元测试规范
|
|
|
|
|
|
### 环境管理
|
|
|
1. 使用Anaconda和Pipenv共同管理Python环境(需细化)
|
|
|
* 包管理(自研、第三方)
|
|
|
* 自动化
|
|
|
2. poetry 依赖、打包、构建、区分环境 (https://python-poetry.org/docs/master/)
|
|
|
* poetry build # 构建可安装的 *.whl 和 tar.gz 文件
|
|
|
* poetry shell # 会根据定义在 pyproject.toml 文件中的依赖创建并使用虚拟环境
|
|
|
* poetry run pytest # 运行使用 pytest 的测试用例,如 tests/test_sample.py
|
|
|
* poetry run python -m unittest tests/sample_tests.py # 运行 unittest 测试用例
|
|
|
* poetry export --without-hashes --output requirements.txt # 导出 requirements.txt 文件, --dev 导出含 dev 的依赖,或者用 poetry export --without-hashes > requirements.txt
|
|
|
|
|
|
示例:
|
|
|
##### 1. 创建项目
|
|
|
```peotry new --src app_ppid```
|
|
|
|
|
|
修改READMD.rst 文件格式 ```cd app_id && mv README.rst README.md ```
|
|
|
|
|
|
创建数据清洗目录
|
|
|
```mkdir -p src/app_ppid/dataclean/udms && cp src/app_ppid/__init__.py src/app_ppid/dataclean && cp src/app_ppid/__init__.py src/app_ppid/dataclean/udms ```
|
|
|
|
|
|
```mkdir -p src/app_ppid/dataclean/common && cp src/app_ppid/__init__.py src/app_ppid/dataclean/common ```
|
|
|
|
|
|
```mkdir -p src/app_ppid/dataclean/resources```
|
|
|
|
|
|
创建爬虫目录
|
|
|
```mkdir -p src/spider && mkdir -p src/spider/scrapy && mkdir -p src/spider/umds && mkdir -p src/spider/resources
|
|
|
```
|
|
|
|
|
|
##### 2. 安装
|
|
|
从pyproject.toml文件中读取依赖,并安装```poetry install```
|
|
|
|
|
|
```text
|
|
|
poetry install --without dev --sync
|
|
|
poetry install --with docs --sync
|
|
|
poetry install --only dev
|
|
|
```
|
|
|
|
|
|
##### 3. 安装单个包
|
|
|
```poetry add requests pendulum```
|
|
|
|
|
|
```poetry add pendulum@^2.0.5 poetry add "pendulum>=2.0.5"```
|
|
|
|
|
|
```poetry add requests --dev```
|
|
|
|
|
|
|
|
|
##### 4. 编译打包
|
|
|
|
|
|
```poetry build```
|
|
|
|
|
|
##### 5. 测试
|
|
|
|
|
|
```poetry run```
|
|
|
|
|
|
#### 项目结构
|
|
|
```text
|
|
|
-- app_ppid # 项目名称
|
|
|
-- readme.md # 说明文档
|
|
|
-- pyproject.toml # 项目管理配置文件
|
|
|
-- tests # 项目测试总目录
|
|
|
-- src # 项目源码主目录
|
|
|
-- app_ppid # 数据清洗总目录
|
|
|
-- udms # udm 模块
|
|
|
-- qcc_region_list_task # udmd2
|
|
|
-- common # 项目共用代码包
|
|
|
-- utils # 包1
|
|
|
-- resources # 资源文件
|
|
|
-- collie_version.txt # 版本文件
|
|
|
-- data_pump # data_pump 配置文件
|
|
|
-- 其他资源文件
|
|
|
--- spider # 爬虫总目录
|
|
|
-- scrapy # scrapy 型爬虫
|
|
|
-- udms # udm 型爬虫
|
|
|
-- resources # 资源文件
|
|
|
```
|
|
|
|
|
|
主要包括数据清洗(dataclean)、爬虫(spider)、测试(test) 3个部分
|
|
|
* 代码中import使用完整包路径,不能使用相对引用。pycharm中右键项目app_person_id, **Mark Directory as Source Root**
|
|
|
* 测试代码路径与源代码路径保持一致。
|
|
|
|
|
|
##### 1. 数据清洗(dataclean)
|
|
|
分为代码(src)、资源文件(resource)两个目录
|
|
|
* 代码src,存放代码文件: .py、.sh、.java、.scala等
|
|
|
* 资源文件resources, 存放资源文件,比如.txt、.yml、.conf、.json等资源类文件
|
|
|
##### 2. 爬虫(spider)
|
|
|
分为scrapy、udms、resources三个目录
|
|
|
* scrapy 爬虫
|
|
|
* udms 非scrapy爬虫
|
|
|
* resources 资源文件
|
|
|
|
|
|
##### 3. 测试(test)
|
|
|
根据数据清洗、爬虫的代码路径,实际生成对应路径的测试用例代码
|
|
|
|
|
|
|
|
|
##### 4. readme.md
|
|
|
|
|
|
|
|
|
### 编码规范&规范化
|
|
|
PEP8
|
|
|
|
|
|
需细化
|
|
|
1. 遵从PEP8规范写代码
|
|
|
2. 理解PEP8指导原则的原因
|
|
|
3. 配置符合PEP8标准开发环境
|
|
|
|
|
|
### 单元测试规范
|
|
|
|
|
|
3. 单元测试
|
|
|
1. 框架
|
|
|
2. 规范
|
|
|
3. 示例
|
|
|
|
|
|
pytest 框架
|
|
|
1. 兼容性好: 支持 Python 2.7,Python 3.4+。
|
|
|
2. 与 unittest 和 nose 测试框架兼容: 如果之前测试用例全部是基于 unittest 或者 nose 来编写的,执行 Pytest 命令同样可以正常运行并得到结果。
|
|
|
3. 丰富的插件支持: 大约有 300 多个,像 Pytest-repeat, pytest-xdist,pytest-ordering,pytest-rerunfailures 以及 pytest-html 这些常用插件在测试重复执行、并发与生成报告方面都提供了非常强大的支持。
|
|
|
4. 允许直接使用 assert 进行断言:相比 unittest 简单,unittest 定义了 assertEqual、assertIn、assertTrue、assertFalse 等一系列断言。
|
|
|
5. 可以自动寻找单测文件、类和函数:Pytest 要求所有的单测文件名都需要满足 test_.py 格式或_test.py 格式。在单测文件中,可以包含 test_ 开头的函数,也可以包含 Test 开头的类。在单测类中,可以包含一个或多个 test_ 开头的函数。在执行 Pytest 命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。
|
|
|
6. 提供应用不同范围前置/后置方法: Pytest 提供了模块级、函数级、类级、方法级的setup/teardown,比 unittest 的 setUp/tearDown 更灵活。
|
|
|
7. 分类执行与测试数据参数化简单 : unittest 需依赖 ddt 库实现数据参数化,而 Pytest 直接使用@pytest.mark.parametrize 装饰器。
|
|
|
|
|
|
## 参数化测试
|
|
|
## 标签化测试
|
|
|
## mock测试 |
|
|
\ No newline at end of file |