小编Raa*_*mEE的帖子

使用 PyTest 进行测试时如何在后台启动 Uvicorn + FastAPI

我有一个用Uvicorn + FastAPI编写的 REST-API 应用程序

我想使用 PyTest 进行测试。

我想在开始测试时在夹具中启动服务器,因此当测试完成时,夹具将终止应用程序。

FastAPI 测试展示了如何测试 API 应用程序,

from fastapi import FastAPI
from starlette.testclient import TestClient

app = FastAPI()


@app.get("/")
async def read_main():
    return {"msg": "Hello World"}


client = TestClient(app)


def test_read_main():
    response = client.get("/")
    assert response.status_code == 200
    assert response.json() == {"msg": "Hello World"}
Run Code Online (Sandbox Code Playgroud)

这不会以通常的方式使服务器联机。似乎由 client.get 命令触发的特定功能是唯一运行的东西。

我找到了这些额外的资源,但我无法让它们为我工作:

https://medium.com/@hmajid2301/pytest-with-background-thread-fixtures-f0dc34ee3c46

如何将服务器作为 py.test 的夹具运行

您将如何从 PyTest 运行 Uvicorn+FastAPI 应用程序,以便它随着测试而上升和下降?

python testing pytest fastapi uvicorn

13
推荐指数
3
解决办法
1万
查看次数

是否有Solaris 10的wget命令

Solaris 11具有wget命令,就像Linux一样.

是否有针对Solaris 10的wget或wget like命令?

wget download solaris-10

12
推荐指数
1
解决办法
4万
查看次数

如何防止 Pydantic 在 ValidationError 上抛出异常

如何防止 Pydantic 在 ValidationError 上抛出异常?

from pydantic import BaseModel, NonNegativeInt


class Person(BaseModel):
    name: str
    age: NonNegativeInt
    details: None


p1: Person = Person(name='Alice', age=30, details=None)
print(p1)
p2: Person = Person(name='Bob', age=40, details={'height': 1.70, 'weight': 91})
print(p1)
Run Code Online (Sandbox Code Playgroud)

我希望这个异常终止程序并记录警告

name='Alice' age=30
Traceback (most recent call last):
  File "playground/test_pydantic_prevent_exception.py", line 12, in <module>
    p2: Person = Person(name='Bob', age=40, details={'height': 1.70, 'weight': 91})
  File "pydantic/main.py", line 406, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for Person
details
  value is not None (type=type_error.not_none)
Run Code Online (Sandbox Code Playgroud)

解释为什么我需要这个的用例如下:

我正在开发一个未 …

python validation pydantic

10
推荐指数
2
解决办法
4万
查看次数

使用 Winium 实现“Chrome Legacy Window”(Chromium) 的自动化

我正在尝试使用 Winium 自动化 Windows 应用程序 GUI。该应用程序同时使用 WPF 窗口和“Chrome Legacy Window”(Chromium) 窗口。

我正在使用“Automation Spy”工具来检查 WPF 窗口内的 GUI 元素的 id,以便与 Winium 一起使用。Automation Spy 无法检查“Chrome Legacy Window”窗口中的元素,就像 Winium 无法访问这些元素一样。

“Chrome Legacy Window”是一个 WEB 窗口,因此需要使用 Selenium 进行自动化。

如何使用 Selenium 挂接 Chromium 窗口(它不是 Firefox、Chrome 等浏览器)?

java selenium automated-tests winium

8
推荐指数
1
解决办法
5826
查看次数

如何在 Pydantic BaseModel 中 JSON 序列化 ENum 类

我有以下使用 Pydantic BaseModel 数据类的代码

from enum import Enum

import requests
from pydantic import BaseModel
from requests import Response


class PetType(Enum):
    DOG: str = 'dog'
    CAT: str = 'cat'


class Pet(BaseModel):
    name: str
    type: PetType


my_dog: Pet = Pet(name='Lucky', type=PetType.DOG)

# This works
resp: Response = requests.post('https://postman-echo.com/post', json=my_dog.json())
print(resp.json())

#This doesn't work
resp: Response = requests.post('https://postman-echo.com/post', json=my_dog.dict())
print(resp.json())
Run Code Online (Sandbox Code Playgroud)

当我发送 json 等于模型的 dict() 时,我收到错误:

> TypeError:“PetType”类型的对象不可 JSON 序列化

如何克服此错误并使 PetType 也可序列化?

PS 上面的例子简短而简单,但我遇到了一个用例,其中两种情况都发送

json=my_dog.json() 
Run Code Online (Sandbox Code Playgroud)

json=my_dog.dict() 
Run Code Online (Sandbox Code Playgroud)

不工作。这就是为什么我需要使用 dict() 解决发送问题

python serialization json pydantic

5
推荐指数
1
解决办法
1万
查看次数

Pydantic 如何处理未知的字典键

我有一个 json 对象,我想使用 Pydantic 进行验证。

我面临的问题是:

1 - 我不知道 JSON 中有多少个字段。下面的示例有 2 个键\字段:“225_5_99_0”和“225_5_99_1”

2 - 我不知道这种情况下的字段名称:它可以是“225_5_99_0”或“226_0_0_0”。我只知道他们遵守一些约定。

3 - 某些字段具有对模型字段名称无效的关键字,例如“*”键。我可以通过将字段名称别名为“星号”来克服这个问题。

关于处理此类 JSON 的最佳方法有什么想法吗?

{
    "225_5_99_0": {
        "*": {
            "flag": "",
            "group1": "225.5.99.0",
            "group_type": "M",
            "uptime": "0:11:23",
            "iif": {"lo5": {
                "flag": "R",
                "uptime": "0:44:41"
            }
            },
            "oil": {
                "bun_1215": {
                    "flag": "",
                    "join_time": "00:03:14",
                    "uptime": "0:42:27"
                },
                "bun_1218": {
                    "flag": "",
                    "join_time": "00:02:44",
                    "uptime": "0:44:41"
                }
            },
            "address": "100.100.100.100",
            "rp": "*",
            "source": "*",
            "upstream": "Joined(00:00:19)"
        }
    },
    "225_5_99_1": {
        "*": {
            "flag": …
Run Code Online (Sandbox Code Playgroud)

python json pydantic

5
推荐指数
1
解决办法
4758
查看次数

vim正则表达式和高亮语法:找到匹配并忽略其中的子匹配

我正在尝试在VIM中编写语法高亮显示器.你如何在另一场比赛中突出显示一场比赛?

为了找到每个匹配,我创建了两syn match行,它们在匹配是分开的情况下工作.

syn match celString "^xpath=.\{-};"      -> matches "xpath=.........;"
syn match celComment "\${.\{-}}"         -> matches "${LIB_METADATA};"
Run Code Online (Sandbox Code Playgroud)

突出显示语法结果 - 第一行具有分隔匹配,而第二行具有重叠匹配

  • xpath字符串的第一行是粉红色,字符串是蓝色${..}.

  • xpath字符串的第二行是粉红色,但${..}忽略该字符串中包含的内容.

我试图改变syn match线的顺序,但这没有任何影响.

我很感激你的想法.

vim vim-syntax-highlighting

3
推荐指数
1
解决办法
595
查看次数

Jenkins REST buildWithParameters的JSON格式是什么,以覆盖默认参数值

我可以通过将POST调用发送到http:// jenkins:8080 / view / Orion_phase_2 / job / test_remote_api_triggerring / buildWithParameters来构建具有其参数默认值的Jenkins作业

并且可以通过发送到以下URL来覆盖默认参数“产品”,“套房”和“标记”: http:// jenkins:8080 / view / Orion_phase_2 / job / test_remote_api_triggerring / buildWithParameters?product = ALL&suites = ALL&markers = ALL

但是我看到了一些示例,可以通过发送带有新值的JSON正文来覆盖参数。我正在尝试通过发送以下json主体来做到这一点。他们都不适合我。

{
        'product': 'ALL',
        'suites': 'ALL',
        'markers': 'ALL'
}
Run Code Online (Sandbox Code Playgroud)

{
  "parameter": [
        {
            "name": "product",
            "value": "ALL"
        },
        {
            "name": "suites",
            "value": "ALL"
        },
        {
            "name": "markers",
            "value": "ALL"
        }
  ]
}
Run Code Online (Sandbox Code Playgroud)

如果要覆盖参数“ product”,“ suites”和“ markers”的值,要发送什么JSON?

api rest jenkins

3
推荐指数
1
解决办法
2549
查看次数

Python中定义一个数据类的正确方法是什么,该数据类同时具有自动生成的 __init__ 和来自值字典的附加 init2

在 Python 中,我有一个包含十多个成员的数据类。我用它创建一个字典并将其发布到 ElasticSearch 中

现在我想从 ElasticSearch获取一个字典并用它来初始化数据类。

自从:

  1. Python 不允许创建具有不同签名的第二个 __ init __ 。
  2. 我不想手动编写自动生成的 __ init __ 只是为了添加可选参数
  3. 我不想添加可选参数来接受字典,只是为了让 __ init __ 保持自动生成。

我想添加第二个方法init2,它将返回数据类的实例,并将传递的 dict 参数解析到自动生成的 __ init __ 方法中。


我会感谢您的意见来决定我下面建议的解决方案是否是正确的实施。

另外,这种实现可以被视为一种工厂吗?

谢谢。


跟进:由于我从 ES 请求中获取的 JSON\dictionary 是:

  1. 与数据类具有完全相同的关键字

  2. 是扁平的,id,没有嵌套对象。

我可以简单地将这些值作为 **dict 传递到自动生成的 __ init __ 方法中。

对于这个具体案例,请参阅下面我的回答:


from dataclasses import dataclass

@dataclass
class MyData:
    name: str
    age: int = 17

    @classmethod
    def init_from_dict(cls, values_in_dict: dict):
        # Original line using MyData was fixed …
Run Code Online (Sandbox Code Playgroud)

python data-class python-dataclasses

3
推荐指数
1
解决办法
4889
查看次数

如何限制可以传递给方法参数的允许值(使用类型提示允许静态代码分析)

在 Python 3 中,我想限制传递给此方法的允许值:

my_request(protocol_type, url)
Run Code Online (Sandbox Code Playgroud)

使用类型提示我可以写:

my_request(protocol_type: str, url: str)
Run Code Online (Sandbox Code Playgroud)

所以协议和 url 仅限于字符串,但我如何验证protocol_type只接受有限的一组值,例如'http''https'

python enums enumeration type-hinting

2
推荐指数
1
解决办法
1988
查看次数

如何在使用类型提示时编写作为链表中的节点的 Python 类

在 Python 3.7 中,我有一个数据类,它是链表中的一个节点。

from dataclasses import dataclass

@dataclass
class Node(object):
    right: Node
    left: Node
Run Code Online (Sandbox Code Playgroud)

问题是我在 Pycharm 中收到检查错误:

未解析的引用“节点”

运行时出现此错误

名称错误:名称“节点”未定义

dataclass 要求我声明类型,那么如何解决这个问题?

python

1
推荐指数
1
解决办法
1204
查看次数