基于Python的自动化测试平台开发你要理解的:uWSGI

软件测试君 2021-11-25 19:25:08
自动化 Python 测试 平台 自动

在这里插入图片描述
在我们使用Django开发自动化测试平台时,最必不可少的步骤是在服务器上部署它。在开发阶段中,对于Django项目我们使用的web服务器一般都是自带的runserver, 但是runserver从内存和工作效率上来讲是不够的。

要部署Django项目,我们需要挂接到工业用的服务器,最常用方式的则是Nginx + uWSGI + Django。

Nginx 作为互联网最受欢迎的高性能 http 和 反响代理 Web 服务器,提供静态资源服务、缓存、负载均衡 等功能。

uWSGI 作为对内服务器,处理动态请求,把HTTP协议转化成WSGI协议,让Django可以直接使用。

Django 则是接收请求,并根据请求内容查询数据等资源构建响应数据,把响应结果再次uWSGI。

对于Nginx 以及 Django 的介绍我们已经有过相关介绍的文章,今天给大家介绍这个在Python Web 开发过程中必不可少的uWSGI。

几个基本的概念

我们先明确以下几个概念:

WSGI:全称是Web Server Gateway Interface,WSGI是一种规范,它描述了使用Python编写的web application (比如:Django)与web server(比如:uWSGI)之间通信的规范,实现两者之间的解耦。当前运行在WSGI协议之上的web框架有Bottle, Flask, Django。

Uwsgi:是一种路线协议,是uWSGI服务器的独占协议,用于在uWSGI服务器与其他网络服务器的数据通信。

uWSGI:是一个web服务器,实现了WSGI协议、uwsgi协议、http协议等。

它们之间的关系如图所示:

图片

在 Nginx + uWSGI + Django 中,处理流程则如下图所示:
图片

WSGI 实现

WSGI协议主要包括server和application两部分:

WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;

WSGI application接收由server转发的request,处理请求,并将处理结果返回给server。Application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器。

WSGI协议其实是定义了一种server与application解耦的规范,即可以有多个实现WSGI server的服务器,也可以有多个实现WSGI application的框架,那么就可以选择任意的server和application组合实现自己的web应用。例如uWSGI和Gunicorn都是实现了WSGI server协议的服务器,Django,Flask是实现了WSGI application协议的web框架,可以根据项目实际情况搭配使用。

下面我们来认识WSGI实现过程:

安装uWSGI:

uWSGI是一个(大的)C应用,因此,你需要一个C编译器 (例如gcc或者clang),以及Python开发头文件。

在基于Debian的发行版上安装:

apt-get install build-essential python-dev

为Python安装uWSGI:

pip install uwsgi

使用网络安装器:

curl http://uwsgi.it/install | bash -s default /tmp/uwsgi

源码安装:

wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd <dir>
make

一个简单的WSGI应用:

让我们从一个简单最简单的应用开始:

def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]

(将其保存为 hello.py)。

它由一个简单的Python函数组成,函数名称为 “application”,它是uWSGI Python加载器将会搜索的默认函数。

应用部署:

现在,启动uWSGI来运行一个HTTP服务器/路由器,它会传递请求到WSGI应用:

uwsgi --http :9090 --wsgi-file hello.py

添加并发和监控:

可以用 --processes 选项添加更多的进程,或者使用 --threads 选项添加更多的线程 (或者可以同时添加)。

uwsgi --http :9090 --wsgi-file hello.py --master --processes 4 --threads 2

这将会生成4个进程 (每个进程有2个线程),一个master进程 (在Inc死掉的时候会生成它们) 和HTTP路由器 。

一个重要的任务是监控。在生产部署上,了解正在发生的事情是至关重要的。stats子系统允许你将uWSGI的内部统计数据作为JSON导出:

uwsgi --http :9090 --wsgi-file hello.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

针对的应用发起几次请求,然后telnet到端口9191,可以查看相关信息。

部署在Nginx服务器:

即使uWSGI HTTP路由器是稳定并且高性能的,但是你或许想要将你的应用放在一个全功能的web服务器之后。

uWSGI原生支持HTTP, FastCGI, SCGI及其特定的名为”uwsgi”的协议。最好的协议显然是uwsgi,nginx和Cherokee已经支持它了。

一个常用的nginx配置如下:

location / {

include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
}

这表示“传递每一个请求给绑定到9090端口并使用uwsgi协议的服务器”。

现在,我们可以生成uWSGI来本地使用uwsgi协议:

uwsgi --socket 127.0.0.1:9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

部署Django

Django大概是最常使用的Python web框架了。部署它是相当容易的 (我们继续配置4个进程,每个进程有2个线程)。

假设Django项目位于 /home/web/myproject:

uwsgi --socket 127.0.0.1:9090 --chdir /home/web/myproject/ --wsgi-file myproject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

注:

使用 --chdir ,指定的目录下,在Django中,需要使用它来正确加载模块。

uWSGI支持多种配置风格,我们还可以使用.ini文件(uwsgi.ini):

[uwsgi]
socket = 127.0.0.1:9090
chdir = /home/web/myproject/
wsgi-file = myproject/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191

仅需运行就可完成部署:

uwsgi uwsgi.ini

下面是一份配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
在这里插入图片描述
这些都可以以在公众号:伤心的辣条 ! 免费领取,还有一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中资料包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

版权声明
本文为[软件测试君]所创,转载请带上原文链接,感谢
https://blog.csdn.net/ai_green/article/details/121542035

  1. 关于#python_while循环的写法#的问题,如何解决?
  2. Python异常处理中异常的种类有哪些?你知道几个?
  3. Python异常處理中异常的種類有哪些?你知道幾個?
  4. Quels sont les types d'exceptions dans la gestion des exceptions python? Combien en savez - vous?
  5. À propos de # Python Comment résoudre le problème de l'écriture de la Boucle while?
  6. Python如何操作system.data.sqlite数据库
  7. python数字游戏,让你欲罢不能
  8. Python中的可迭代对象、迭代器、For循环工作机制、生成器
  9. 一个从没接触过编程的人,如何自学进入Python行业?
  10. 一份超级实用的 Python ”技巧“清单
  11. Python 程序员给上路初学者的3点忠告
  12. 3 conseils pour les débutants sur la route par les programmeurs Python
  13. Une liste de conseils Python super pratiques
  14. Comment quelqu'un qui n'a jamais été en contact avec la programmation peut - il apprendre à entrer dans l'industrie python?
  15. Objets itérables, itérateurs, pour le mécanisme de travail circulaire, générateurs en python
  16. Les Jeux de chiffres Python vous font vous arrêter
  17. Comment Python fonctionne avec la base de données system.data.sqlite
  18. Python之html与markdown互相转换
  19. Python之html與markdown互相轉換
  20. Conversion HTML et markdown de Python
  21. Python生成的随机数,要怎么设定成随机数a小于随机数b啊
  22. Python生成的隨機數,要怎麼設定成隨機數a小於隨機數b啊
  23. Le nombre aléatoire généré par Python, comment définir le nombre aléatoire a est inférieur au nombre aléatoire B
  24. Python爬虫能做什么
  25. Python老技师给上路初学者的3点忠告
  26. 3 conseils aux débutants sur la route de l'ancien technicien Python
  27. Que peuvent faire les reptiles Python
  28. The code NPM cloned from git will report a python error after it is installed!
  29. 数据分析从零开始实战,Pandas读写CSV数据
  30. Python基础(十二):类与对象
  31. Python Foundation (12): classes et objets
  32. Python基礎(十二):類與對象
  33. L'analyse des données commence à zéro et pandas lit et écrit les données CSV
  34. Python Qt GUI设计:QSlider滑动条类(基础篇—16)
  35. #yyds干货盘点#数据分析从零开始实战,Pandas读写CSV数据
  36. This paper designs an examination system for automatically setting questions and judging papers by using Python standard library language to investigate the ability of users to calculate four integers within 100.
  37. Yyds Dry Inventory # Data Analysis started from zero, pandas read and write CSV Data
  38. python数据结构:数组、列表、栈、队列及实现
  39. Python编程真的是未来人工智能的主流吗?
  40. Python编写通讯录,支持模糊查询,利用数据库存储
  41. Python編寫通訊錄,支持模糊查詢,利用數據庫存儲
  42. Python編程真的是未來人工智能的主流嗎?
  43. Python écrit le carnet d'adresses, prend en charge les requêtes floues et utilise le stockage de base de données
  44. La programmation Python est - elle vraiment le courant dominant de l'IA future?
  45. Structure des données Python: tableaux, listes, piles, files d'attente et implémentations
  46. Python networkx Practical Social Network Visualization
  47. [译] 通过 for 循环,比较 Python 与 Ruby 编程思想的差别
  48. Comparez les différences de programmation entre Python et Ruby à travers la boucle for
  49. Python basic and introductory tutorials
  50. What you don't know
  51. 人生苦短,能让你更早下班的Python垃圾回收机制
  52. Boring playing Tetris, using Python to do their own without advertising
  53. Seemingly boring Python games, but I fished for work all afternoon!!
  54. A collection of grammar knowledge points for getting started with Python
  55. Benefits of learning Python
  56. Play childhood memories with Python, greedy snake
  57. Python is suitable for beginners
  58. Simple Python game making
  59. Welfare is coming!! Python basic syntax dry goods
  60. Simply understand the learning direction of Python and make yourself a better choice