分类标签归档:python

Django将数据从Sqlite迁移到MySQL


背景

最近在做一个内部项目时,为了开发效率,所以选择了Sqlite作为数据库,在项目上线时需要将数据库切换到MySQL。

操作步骤

  1. 使用dumpdata将数据导出到文件
python manage.py dumpdata -> data.json
  1. 修改django的settings配置,改为MySQL

  2. 使用loaddata将数据导入到新数据库

python manage.py loaddata data.json

等待命令执行完毕之后,可以自行检查数据是否正确导入。

常见问题

由于字段过长导致的导入失败

这种问题是因为Sqlite对于字段长度并不做校验,比如我们定义一个...

Read more

Django使用fixture简化测试用例


在编写测试用例时需要提前准备测试用的数据。在Django中,有2种比较推荐的准备测试数据的办法:

  1. 在测试用例的setUp方法种添加测试用数据
  2. 使用fixture将测试数据导入到数据库

使用setUp添加数据

在setUp方法中添加测试数据的写法比较简单,例如:

class EXPtest(TestCase):
    def setUp(self):
        self.level0 = Level.objects.create(level=0, exp=0)
        self.level1 = Level.objects.create(level=1, exp=5)
...

Read more

Ubuntu编译安装Python3


背景

因为工作原因,所以经常需要给新机器安装Python3运行环境。所以记录一下安装过程,方便后续查阅。

安装Python

下载源码

Python的源码下载需要到官网下载,地址为:

https://www.python.org/downloads/source/

找到需要的版本进行下载,比如: 3.8.2版本。

安装依赖

在编译安装Python之前,需要先安装一些系统依赖,可以使用如下命令:

sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev  libsqlite3-dev libreadline-d...

Read more

解决MacOS: certificate verify failed: unable to get local issuer certificate的问题


最近将工作的操作系统从Ubuntu切换到了MacOS。在运行爬虫脚本时,如果抓取HTTP的页面,则没有报错,但是当遇到HTTPS页面时,就出现了这么一个报错:

certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)

出现这个问题的原因是给这个网站的签发证书的CA证书没有在操作系统的root证书列表里。这里有2个可能:

  1. 证书是自签名证书(类似于之前的12306)
  2. CA是一个新的CA,操作系统里没有更新对应的CA证书

对于这个问题可以有2个解决办法:

  1. 在脚本中不校验服务端证书有效性;...

Read more

使用Python Coverage获取测试覆盖率


Coverage

当我们完成测试用例的编写之后,需要知道测试用例对整个代码的测试覆盖情况。此时可以使用Coverage工具运行测试用例并统计扫描结果。 在Python中,使用Coverage.py作为Coverage工具。Coverage可以执行测试用例,并生成HTML或者XML格式的报告。

安装

在控制台执行python -m coverage,如果有类似输出:

Code coverage for Python. Use 'coverage help' for help.

说明已经安装过。如果没有安装的话,可以执行: pip install coverage

就可以完成coverag...

Read more

使用Python的unittest框架编写测试用例


unittest是Python语言中的xUnit测试框架实现。也是在开发中最常用的用来写单元测试的框架。本文将介绍一下什么是unittest以及如何使用unittest开发单元测试。

找到需要测试的目标

要写测试用例,首先需要知道我们要测试的目标是什么,在本文中,我们以一个简单的乘法函数作为待测试对象,这个函数的实现如下:

def multiply(x, y):
    """
    将2个给定的参数相乘,并返回结果

    Args:
        :param x: 乘法算子x
        :param y: 乘法算子y
    Returns:
        x * y...

Read more

用Python写测试用例


代码是为了什么,当然是为了重复运行。如何保持单元测试代码的稳定?主要靠好的API设计。API切实正确切割了需求,那么在重构的时候API就基本不用变化,测试用例也不用重写。以后你重构的时候,只要你的测试用例覆盖的够好,基本跑一遍就知道有没有改出问题。这样可以节省大量的时间。

从这段话里可以得到2个信息:

  1. 良好的API设计保证在很大程度上避免重写unit test
  2. 覆盖率良好的unit test可以让你重构代码的时候省心省力。

什么是单元测试

unit test is the idea that they are tests in isolation of individual comp...

Read more