如何结合Django后端测试与TestCafe前端测试?
结合Django后端测试与TestCafe前端测试的方案
方法一:自定义Django命令串联测试流程
可以写一个自定义Django管理命令,让它先执行后端测试,再自动启动TestCafe跑前端测试,同时复用Django测试的临时数据库特性。
- 在项目下创建
management/commands/目录(不存在则新建),添加run_all_tests.py文件:
from django.core.management.base import BaseCommand from django.core.management import call_command import subprocess class Command(BaseCommand): help = '依次运行Django后端测试和TestCafe前端测试' def handle(self, *args, **options): # 执行Django后端测试 self.stdout.write('正在运行Django后端测试...') call_command('test', '--keepdb') # --keepdb 保留测试数据库,减少重复创建的耗时;需全新数据库则移除该参数 # 启动Django测试服务器(使用测试数据库配置) self.stdout.write('启动Django测试服务器...') server_process = subprocess.Popen( ['python', './manage.py', 'runserver', '--settings', 'your_project.settings.test'], stdout=subprocess.PIPE, stderr=subprocess.PIPE ) try: # 运行TestCafe前端测试 self.stdout.write('正在运行TestCafe前端测试...') subprocess.run( ['testcafe', 'chromium', './tests/testcafe.js'], check=True ) finally: # 关闭测试服务器 self.stdout.write('停止Django测试服务器...') server_process.terminate() server_process.wait()
- 准备测试专用的settings文件(
settings/test.py),指定测试数据库:
from .base import * DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db_test.sqlite3', } }
- 执行命令:
python ./manage.py run_all_tests
方法二:Shell脚本快速串联步骤
如果不想编写Django命令,直接用Shell脚本更简洁:
#!/bin/bash # 运行Django后端测试,保留数据库 echo "正在运行Django后端测试..." python ./manage.py test --keepdb # 后台启动Django测试服务器 echo "启动Django测试服务器..." python ./manage.py runserver --settings=your_project.settings.test & SERVER_PID=$! # 等待服务器启动(可根据实际情况调整等待时长) sleep 3 # 执行TestCafe前端测试 echo "正在运行TestCafe前端测试..." testcafe chromium ./tests/testcafe.js # 关闭测试服务器 echo "停止Django测试服务器..." kill $SERVER_PID
保存为run_all_tests.sh,赋予执行权限:chmod +x run_all_tests.sh,运行命令:./run_all_tests.sh
关键注意事项
- TestCafe测试脚本中,所有API请求的基础URL要指向Django测试服务器(默认
http://localhost:8000)。 - 若使用PostgreSQL/MySQL等数据库,需确保数据库权限允许Django自动创建、销毁测试库。
- 若需要每次测试都用全新数据库,移除命令中的
--keepdb参数即可。
内容的提问来源于stack exchange,提问作者user2239318
相关产品推荐
相关产品推荐

