测试驱动开发(Django)9

9.1 TDD及部署的危险区域

  • 静态文件(css、JavaScript、图片等)

       web服务器往往需要特殊配置才能伺服静态文件

  • 数据库

       可能会遇到权限和路径问题,在多次部署之间不能丢失数据

  • 依赖

       要保证服务器上安装了网站依赖的包且版本正确

解决方案:

  • 使用与生产环境一样的基础架构部署过渡网站(staging site),这么做可以测试部署过程,确保部署真正的网站时操作正确。
  • 可以在过渡网站中运行功能测试,确保服务器中安装了正确的代码和依赖包,而且为了测试网站的布局,我们编写了冒烟测试,以获知是否正确加载了CSS。
  • 与在本地设备上一样,当服务器上运行多个Python应用时,可以使用虚拟环境管理包和依赖。
  • 最后,一切操作都自动化完成。使用自动化脚本部署新版本,使用同一个脚本把网站部署到过渡环境和生产环境,这么做能尽量保证过渡网站和线上网站一样。

9.2 一如既往,先写测试

functional_tests/tests.py

import os

MAX_WAIT = 10


class NewVisitorTest(StaticLiveServerTestCase):
    def setUp(self):  # 测试执行前
        self.browser = webdriver.Firefox()
        staging_server = os.environ.get('STAGING_SERVER')
        if staging_server:
            self.live_server_url = 'http://' + staging_server

运行功能测试:python manage.py test functional_tests

没有问题,再运行:STAGING_SERVER=127.0.0.1 python manage.py test functional_tests       #域名或IP地址

Ran 3 tests in 16.612s

FAILED (failures=1, errors=2)

提交一下:git commit -am 'Hack FT runner to be able to test staging'

9.3 注册域名

9.4 手动配置托管网站的服务器

9.4.1 选择在哪里托管网站

9.4.2 搭建服务器

9.4.3 用户账户、SSH和权限

9.4.4 安装Nginx

参照:centos下安装Nginx_Marvin_Wind的博客-CSDN博客

9.4.5 安装Python3.6

参照:centos 安装 pyhon3_Marvin_Wind的博客-CSDN博客

安装git :

查看版本验证安装:git --version

yum安装:yum install git -y

卸载:yum remove git

9.4.6 解析过渡环境和线上环境所用的域名

9.4.7 使用功能测试确认域名可用而且Nginx正在运行

测试结果:AssertionError: 'To-Do' not found in 'Welcome to nginx!'

9.5 手动部署代码

之后按照以下结构存放代码

/home/user/sites
├── www.live.my-website.com
│   ├── database
│   ├── source
│   ├── static
│   └── virtualenv
└── www.staging.my-website.com
    ├── database
    ├── source
    ├── static
    └── virtualenv

9.5.1 调整数据库位置

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, '../database/db.sqlite3'),
    }
}

mkdir ../database

python manage.py migrate --noinput

提交git commit -am 'move sqlite database outside od main source tree'

Git push origin master        #推到github仓库

服务器:

/home/user/sites

export SITENAME=superlists-staging.com       #声明临时变量

mkdir -p ./$SITENAME/database

mkdir -p ./$SITENAME/static

mkdir -p ./$SITENAME/virtualenv

克隆远程仓库:

git clone https://github.com/username/TDD_django.git ./$SITENAME/source

git clone git://github.com/username/TDD_django.git ./$SITENAME/source

服务器:python manage.py runserver

9.5.2 手动创建虚拟环境,使用requirements.txt

echo 'django==1.11' > requirements.txt

git add requirements.txt

git commit -m 'Add requirements.txt for virtualenv'

git push

服务器:git pull

创建虚拟环境:cd /home/sites/superlists-staging.com/source  

python3 -m venv ../virtualenv

激活虚拟环境:source ../virtualenv/bin/activate。但无需这么做。直接调用bin目录下可执行文件:pip、python等。

../virtualenv/bin/pip install -r requirements.txt            #虚拟环境安装依赖包

../virtualenv/bin/python manage.py runserver            #虚拟环境运行

网页出现:

DisallowedHost at /

Invalid HTTP_HOST header

settings.py  -> 

ALLOWED_HOSTS = ['*']

Nginx配置目录: /usr/local/nginx/conf/

创建staging-site.conf,写入:

server {
    listen 80;

    server_name “域名”;
    location / {
        proxy_pass http://localhost:8000;
        }

nginx.conf最后一个}前:

include /usr/local/nginx/conf/sites/*.conf;

所有网站conf放在/usr/local/nginx/conf/sites

重启:/usr/local/nginx/sbin/nginx –s reload

进行功能测试:STAGING_SERVER=域名 python manage.py test functional_tests

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="id_list_table"]

9.5.4 使用迁移创建数据库

../virtualenv/bin/python manage.py migrate --noinput     #禁止输入确定

重启服务器

Ran 3 tests in 24.146s

OK

9.6 部署成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值