如何为.NET HTTP服务器设置Gitlab CI并使用Python进行测试?
我正在做一个项目,试图在C#中设置HTTP服务器。使用如何为.NET HTTP服务器设置Gitlab CI并使用Python进行测试?,python,asp.net,docker,continuous-integration,gitlab,Python,Asp.net,Docker,Continuous Integration,Gitlab,我正在做一个项目,试图在C#中设置HTTP服务器。使用pytest模块测试服务器的响应。 这就是我到目前为止所做的: 使用swagger编辑器定义API 使用swagger生成器生成基代码 编写一些python测试,向服务器发送请求并测试响应是否满足某些要求 现在,我想在开始编写与前面定义的路由对应的函数之前,在gitlab上设置CI。我使用Docker在本地计算机上设置了一个Runner(稍后将在专用服务器上运行)。 由于我刚接触CI,有几个问题我一直在努力解决: 由于我需要Python
pytest
模块测试服务器的响应。这就是我到目前为止所做的:
- 使用swagger编辑器定义API
- 使用swagger生成器生成基代码
- 编写一些
测试,向服务器发送请求并测试响应是否满足某些要求python
由于我刚接触CI,有几个问题我一直在努力解决:
- 由于我需要Python和.NET进行测试,我应该选择.NET作为基本映像,然后安装Python还是Python作为基本映像,然后安装.NET?什么更容易?我试过后者,但看起来不太优雅
- 我是在推送到远程存储库之前构建并在存储库中包含
文件夹以执行这些文件,还是宁愿在CI期间构建,因此不必推送除源代码以外的任何内容/bin
我知道这些问题有点疯狂,但由于我对CI和Docker都是新手,我正在寻找关于如何遵循最佳实践(如果有)的建议。如果您没有在
.gitlab CI.yml
文件中指定,则跑步者的基本映像只是默认映像。您可以使用.gitlab ci.yml
文件顶部的“管道默认”映像(在任何作业之外)覆盖运行程序的默认映像,也可以单独为每个作业指定映像
使用“管道默认”图像:
image:python:latest
阶段:
-建造
...
在本例中,所有作业都将使用python:latest
图像,除非作业指定自己的图像,如本例所示:
阶段:
-建造
-试验
构建作业:
阶段:建造
图片:python:最新版本
脚本:
- ...
在这里,此作业将覆盖跑步者的默认值
image:python:latest
阶段:
-建造
-数据库单元设置
构建作业:
阶段:建造
脚本:
-#运行一些构建步骤
数据库设置作业:
阶段:db_设置
图片:mysql:最新版本
脚本:
-mysql-h my-host.example.com-u my user-pmy password-e“创建数据库我的数据库
在本例中,“构建作业”使用“管道默认”映像,因为它没有指定自己的映像,但“数据库设置作业”使用的是mysql:latest
映像
下面是一个示例,其中跑步者的默认图像是ruby:latest
阶段:
-建造
-试验
构建作业:
阶段:建造
脚本:
-#运行一些构建步骤
测试作业:
阶段:测试
图片:戈朗:最新
脚本:
-#运行一些测试
在最后一个示例中,“构建作业”使用运行者的基本映像,ruby:latest
,而“测试作业”使用golang:latest
对于第二个问题,这取决于您,但约定是只提交源代码,而不是依赖项/编译资源,但这只是一个约定。
构建:这是否意味着每个作业都是一个独立的过程,并且它们可以相互通信?因此,我将设置一个用于启动服务器的作业和另一个用于启动测试脚本的作业?不,当使用docker executor时,所有作业都在它们自己的、独立的docker容器中运行,该容器在作业启动时旋转,在作业完成时终止。我没有与其他执行者直接接触的经验,但一般来说,这些作业之间的通信不是CI/CD的任务。但是,您如何测试对服务器请求的响应?我看到的唯一选择是在单个作业中运行服务器和测试,对此我无法找到一个优雅的解决方案或示例…我将您的测试解释为针对代码库的静态测试,而不是针对正在运行的应用程序的静态测试。要测试正在运行的应用程序,它将取决于您通常如何部署它。对我来说,我在一个作业中在qa环境中部署一个web应用程序,然后在另一个作业中对正在运行的应用程序运行浏览器测试(使用headless chrome)。你必须找出什么最适合你的测试和应用。