精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Sentry 開發者貢獻指南 - 測試技巧

開發
作為 CI 流程的一部分,我們在 Sentry 運行了多種測試。本節旨在記錄一些 sentry 特定的幫助程序, 并提供有關在構建新功能時應考慮包括哪些類型的測試的指南。

作為 CI 流程的一部分,我們在 Sentry 運行了多種測試。本節旨在記錄一些 sentry 特定的幫助程序, 并提供有關在構建新功能時應考慮包括哪些類型的測試的指南。

獲取設置

驗收和 python 測試需要一組有效的 devservices。建議使用 devservices 來確保所需要的服務正在運行。如果您還使用本地環境進行本地測試,您將需要使用 --project 標志將本地測試卷與測試套件卷分開:

# 關閉本地測試服務。
sentry devservices down

# 打開帶有 test 前綴的服務以使用單獨的容器和卷
sentry devservices up --project test

# 驗證測試容器是否正確出現
docker ps --format '{{.Names}}'

# 稍后當您完成運行測試并想再次運行本地服務器時
sentry devservices down --project test && sentry devservices up

使用 --project 選項時,您可以確認哪些容器正在運行 docker ps。每個正在運行的容器都應該以 test_ 為前綴。有關管理服務的更多信息,請參閱 devservices docs 部分。

??https://develop.sentry.dev/services/devservices/??

Python 測試

對于 python 測試,我們使用 pytest 和 Django 提供的測試工具。在此基礎之上,我們添加了一些基本測試用例(在 sentry.testutils.cases 中)。

??https://docs.pytest.org/en/latest/??

端點集成測試是我們大部分測試套件的重點所在。這些測試幫助我們確保我們的 customers、integrations 和前端應用程序的 API 繼續以預期的方式工作。您應該努力包含涵蓋各種用戶角色、跨組織/團隊訪問場景以及無效數據場景的測試,因為這些在手動測試時經常被忽略。

運行 pytest

您可以根據更改的范圍使用 pytest 運行單個目錄、單個文件或單個測試:

# 對整個目錄運行測試
pytest tests/sentry/api/endpoints/

# 對目錄中匹配模式的所有文件運行測試
pytest tests/sentry/api/endpoints/test_organization_*.py

# 從單個文件運行測試
pytest tests/sentry/api/endpoints/test_organization_group_index.py

# 運行單個測試
pytest tests/snuba/api/endpoints/test_organization_events_distribution.py::OrganizationEventsDistributionEndpointTest::test_this_thing

# 在匹配子字符串的文件中運行所有測試
pytest tests/snuba/api/endpoints/test_organization_events_distribution.py -k method_name

pytest 的一些常用選項是:

-k 通過子字符串過濾測試方法/類。

-s 在運行測試時不要捕獲標準輸出。

有關更多使用選項,請參閱 pytest 文檔。

??http://doc.pytest.org/en/latest/usage.html??

在測試中創建數據

Sentry 還添加了一套 factory 輔助方法,可幫助您構建數據以針對其編寫測試。 sentry.testutils.factories 中的工廠方法可用于我們所有的測試套件類。使用這些方法來建立所需的組織、項目和其他基于 postgres 的狀態。

您還應該使用 store_event() 以類似于應用程序在生產中所做的方式存儲事件。存儲事件需要您的測試繼承自 SnubaTestCase。使用 store_event() 時,請注意在事件上設置過去的 timestamp。省略時,timestamp 將使用 'now',這可能會導致由于 timestamp 邊界而無法選擇事件。

from sentry.testutils.helpers.datetime import before_now
from sentry.utils.samples import load_data

def test_query(self):
data = load_data("python", timestamp=before_now(minutes=1))
event = self.store_event(data, project_id=self.project.id)

設置選項和功能標志

如果您的測試是針對帶有功能標記的端點,或者需要設置特定選項。您可以使用輔助方法將配置數據更改為正確的狀態:

def test_success(self):
with self.feature('organization:new-thing'):
with self.options({'option': 'value'}):
# Run test logic with features and options set.

# Disable the new-thing feature.
with self.feature({'organization:new-thing': False}):
# Run you logic with a feature off.

外部服務

使用 responses 庫為您的代碼發出的出站 API 請求添加存根響應。這將幫助您相對輕松地模擬成功和失敗的場景。

可靠地使用時間

在編寫與攝取事件相關的測試時,我們必須在事件的約束內操作不能超過 30 天。因為所有事件都必須是最近的,所以我們不能使用傳統的時間凍結策略在測試中獲得一致的數據。我們不是選擇任意的時間點,而是從現在開始向后工作,并且有一些輔助函數可以這樣做:

from sentry.testutils.helpers.datetime import before_now, iso_format

five_min_ago = before_now(minutes=5)
iso_timestamp = iso_format(five_min_ago)

這些函數生成 datetime 對象,以及相對于當前的 ISO 8601 格式的 datetime 字符串, 使您能夠在已知時間偏移處擁有事件,而不會違反 relay 強加的 30 天限制。

在測試中檢查 SQL 查詢

將以下內容添加到項目根目錄中的 conftest.py 中:

import itertools
from django.conf import settings
from django.db import connection, connections, reset_queries
from django.template import Template, Context

@pytest.fixture(scope="function", autouse=True)
def log_sql():
reset_queries()
settings.DEBUG = True

yield

time = sum([float(q["time"]) for q in connection.queries])
t = Template(
"{% for sql in sqllog %}{{sql.sql|safe}}{% if not forloop.last %}\n\n{% endif %}{% endfor %}"
)
queries = list(itertools.chain.from_iterable([conn.queries for conn in connections.all()]))
log = t.render(Context({"sqllog": queries, "count": len(queries), "time": time}))
print(log)

現在,在測試期間執行的所有 SQL 都將打印到標準輸出。建議使用 pytest 的 -k 選擇器縮小輸出范圍。另請注意,您需要通過 -s 來查看標準輸出。

驗收測試

我們的驗收測試利用 selenium 和 chromedriver 來模擬用戶使用前端應用程序和整個后端堆棧。我們在 Sentry 使用驗收測試有兩個目的:

涵蓋僅通過端點測試或僅使用 Jest 無法涵蓋的工作流程。

通過我們的視覺回歸 GitHub Actions 為視覺回歸測試準備快照。

驗收測試可以在 tests/acceptance 中找到,并使用 pytest 在本地運行。

運行驗收測試

當您運行驗收測試時,webpack 將自動運行以構建靜態資資源。如果您在創建或修改驗收測試時更改 Javascript 文件, 則每次更改后都需要 rm .webpack.meta 以觸發靜態資源的重建。

# 運行單個驗收測試。
pytest tests/acceptance/test_organization_group_index.py \
-k test_with_onboarding

# 運行帶有頭的瀏覽器,以便您可以觀看它。
pytest tests/acceptance/test_organization_group_index.py \
--no-headless=true \
-k test_with_onboarding

# 打開每個 snapshot image
SENTRY_SCREENSHOT=1 VISUAL_SNAPSHOT_ENABLE=1 \
pytest tests/acceptance/test_organization_group_index.py \
-k test_with_onboarding

如果您看到:

WARNING: Failed to gather log types: Message: unknown > command: Cannot call non W3C standard command while in W3C mode

則表示 Webpack 未正確編譯資源。

定位元素

因為我們使用 emotion,所以我們的類名通常對瀏覽器自動化沒有用。相反,我們自由地使用 data-test-id 屬性來定義瀏覽器自動化和 Jest 測試的 hook 點。

處理異步動作

我們所有的數據都異步加載到前端,驗收測試需要考慮各種延遲和響應時間。我們傾向于使用 selenium 的 wait_until* 特性來輪詢 DOM,直到元素出現或可見。我們不使用 sleep()。

視覺回歸

像素很重要,因此我們使用視覺回歸來幫助捕捉 Sentry 渲染方式的意外變化。在驗收測試期間,我們捕獲屏幕截圖并將您的拉取請求中的屏幕截圖與批準的基線進行比較。

雖然我們對視覺回歸有相當廣泛的覆蓋,但仍有一些重要的盲點:

懸停(Hover)卡片與懸停狀態

模態窗口

圖表和數據可視化

所有這些組件和交互通常不包含在可視化快照中,您在處理其中任何一個時都應該小心。

處理不斷變化的數據

因為視覺回歸比較圖像快照,而且我們數據的很大一部分處理時間序列數據, 所以我們經常需要用 'fixed' 數據替換基于時間的內容。您可以使用 getDynamicText 幫助程序為依賴于當前時間或變化 過于頻繁而無法包含在可視快照中的組件/數據提供固定內容。

Jest 測試

我們的 Jest 套件涵蓋為前端組件提供功能和單元測試。我們更喜歡編寫與組件交互并觀察結果(導航、API 調用)的功能測試, 而不是檢查 prop 傳遞和 state 突變。請參閱 Frontend Handbook 了解更多 Jest 測試技巧。

??https://develop.sentry.dev/frontend/#testing??

# Run jest in interactive mode
yarn test

# Run a single test
yarn test tests/js/spec/views/issueList/overview.spec.js

API Fixtures

因為我們的 Jest 測試在沒有 API 的情況下運行, 所以我們有各種 fixture 構建器可用于幫助生成 API 響應有效負載。 TestStubs 全局包括 tests/js/sentry-test/fixtures/ 中的所有 fixture 函數。

您還應該使用 MockApiClient.addMockResponse() 來設置您的組件將進行的 API 調用的響應。未能模擬端點將導致測試失敗。

CI 中的 Kafka 測試

Snuba 測試套件 (.github/workflows/snuba-integration-test.yml) 是唯一真正讓 Kafka 在 CI 中運行的測試套件。如果您有一個需要 Kafka 運行的測試,那么這些測試需要嵌套在 Snuba 測試文件夾 (tests/snuba/) 下。如果不這樣做,您的測試將超時并在 GH actions 中被取消。

責任編輯:武曉燕 來源: 黑客下午茶
相關推薦

2022-01-11 20:42:54

開發Sentry標志

2022-01-17 19:34:43

SentryWeb APISentry API

2022-01-15 23:33:47

SentryPyCharm配置

2022-01-02 23:26:08

開發SDK Sentry

2021-12-15 20:06:48

ReactJSSentry開發者

2022-01-21 21:33:03

開發JavaScript應用

2021-12-25 22:31:55

Sentry 監控SDK 開發 性能監控

2022-01-19 19:49:53

Sentry瀏覽器SDK

2022-01-16 22:16:59

數據庫Sentry開發者

2022-01-13 20:13:31

元宇宙搜索引擎

2022-01-03 22:59:30

開發SDK數據

2021-12-31 18:35:40

監控Sentry開發

2022-01-02 06:59:43

SentrySDK 開發客戶端報告

2021-12-16 20:12:37

后端開發Sentry

2022-01-20 19:49:10

Sentry開發Scope

2021-12-17 19:15:51

前端蟲洞狀態

2015-07-22 16:08:46

OpenStack開源貢獻代碼

2018-03-27 23:25:40

Paddle

2015-07-20 09:16:42

iOSWatchKit開發

2011-07-07 10:50:09

Cocoa 框架
點贊
收藏

51CTO技術棧公眾號

在线观看欧美日韩国产| 亚洲精品日韩综合观看成人91| 97视频免费在线观看| 亚洲av片不卡无码久久| 欧美色片在线观看| 中文字幕一区日韩精品欧美| 国产精品视频500部| 精品黑人一区二区三区| 国产精品久久天天影视| 亚洲国产精品久久久久秋霞蜜臀| 欧美婷婷精品激情| 黄页网站在线| 中文字幕精品一区二区精品绿巨人| 91在线免费看网站| 天天操夜夜操视频| 欧美黄在线观看| 亚洲欧美中文字幕| 国产精品日日摸夜夜爽| 欧美三区四区| 亚洲成人av电影在线| 永久免费精品视频网站| 视频二区在线| 盗摄精品av一区二区三区| 国产精品久久久久久影视| 黄色激情视频在线观看| 999国产精品| 亚洲深夜福利网站| 国产一区二区成人| 老司机av福利| 黄色片在线播放| 成人深夜在线观看| 亚洲xxxxx电影| 中文字幕 国产| 欧美专区18| 国外视频精品毛片| 蜜臀久久精品久久久用户群体| 久久不见久久见免费视频7| 精品国产三级a在线观看| 一级黄色大片儿| 福利一区在线| 在线视频欧美精品| 日韩免费视频播放| 爱啪啪综合导航| 亚洲一区二区av在线| 大桥未久一区二区三区| 日本高清在线观看wwwww色| 欧美国产1区2区| 日韩av电影免费观看| 天堂在线免费av| av中文字幕在线不卡| 国产精品免费区二区三区观看| 国产女人高潮的av毛片| 国内精品免费在线观看| 成人欧美一区二区三区黑人孕妇 | 免费av一区二区三区四区| 精品日韩成人av| 人妻av一区二区三区| 日韩精品免费视频一区二区三区| 777亚洲妇女| 久久久精品高清| 国产精品xxx| 欧美精品一二三| 中文字幕第22页| 日韩区一区二| 久久综合色占| 一本大道久久a久久精二百| 欧美黑人经典片免费观看| av成人 com a| 欧美日韩国产页| 国内外免费激情视频| 欧美日韩免费看片| 欧美日韩中字一区| 日韩成人av免费| 999久久久久久久久6666| 337p日本欧洲亚洲大胆色噜噜| 日韩成人av影院| 美日韩中文字幕| 色偷偷噜噜噜亚洲男人的天堂| 99热这里只有精品4| 欧美极品一区二区三区| 91精品国产91久久久| 日韩精品一区二区亚洲av| 日韩高清不卡一区二区| 成人久久一区二区| 高清国产mv在线观看| 91碰在线视频| 在线观看日韩片| 超碰在线资源| 欧美在线免费播放| 亚洲综合在线一区二区| 久久中文资源| 日韩专区在线播放| 精品少妇一二三区| 日韩一区精品字幕| 5566av亚洲| 免费观看成年在线视频网站| 一区视频在线播放| 日韩av三级在线| 少妇精品视频在线观看| 亚洲第一视频网| 五月婷婷六月香| 亚洲国产导航| 成人在线一区二区| 天堂a√中文在线| 久久影院亚洲| 国产精品久线在线观看| 免费看日b视频| 欧美日韩大片| 亚洲第一区在线观看| 妖精视频在线观看免费| 在线日韩欧美| 91亚洲va在线va天堂va国| 国产精品国产高清国产| 亚洲人精品午夜| 日韩亚洲在线视频| 国产区精品视频在线观看豆花| 中文字幕亚洲二区| 成人免费视频毛片| 国产成人精品影视| 亚洲人成人77777线观看| 欧产日产国产精品视频| 欧美一级精品大片| 免费看的黄色录像| 国产亚洲精品久久久久婷婷瑜伽| 91色视频在线导航| 福利片在线观看| 精品女同一区二区三区在线播放| 亚洲制服在线观看| 日本激情一区| 国产精品成人免费视频| 天堂а在线中文在线无限看推荐| 亚洲国产精品嫩草影院| 免费黄频在线观看| 色综合色综合| 国产日韩欧美在线播放| av网站在线免费观看| 色婷婷亚洲精品| 成年人网站免费看| 国产欧美日韩一区二区三区在线| 99r国产精品视频| 18视频在线观看| 欧美精品一二三区| 黑人狂躁日本娇小| 久久国产福利国产秒拍| 亚洲精品免费在线看| 欧美无毛视频| 亚洲人成电影在线| 三级网站在线播放| 久久综合国产精品| 国产真实乱子伦| 网红女主播少妇精品视频| 91精品国产91久久久久久吃药| 性做久久久久久久| 亚洲二区在线观看| 99re久久精品国产| 乱码第一页成人| 日韩精品久久一区| 麻豆天美蜜桃91| 精品久久影院| 国产精品视频网址| 午夜在线视频| 欧美一区二区三区在| 国产盗摄一区二区三区在线| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品女人久久久| 国产精品久久久久一区二区三区 | 日本欧美在线| 久久久999精品| а√中文在线资源库| 一区二区三区波多野结衣在线观看| 国产免费无码一区二区| 9色精品在线| 热re99久久精品国产99热| 日韩欧美少妇| 久久av在线看| 日本激情一区二区| 色视频一区二区| 成人三级视频在线观看| 国产a级毛片一区| 黑人糟蹋人妻hd中文字幕| 欧美色女视频| 97在线电影| 周于希免费高清在线观看| 中文字幕久久亚洲| 亚洲av无码国产精品永久一区| 午夜电影网亚洲视频| 丁香花五月婷婷| 亚洲国产一二三区| 北条麻妃一区二区三区| 无码人妻丰满熟妇区毛片18| 爽成人777777婷婷| 古典武侠综合av第一页| 国产精品一区二区av影院萌芽| 中文字幕不卡av| 色网站免费观看| 欧美三级日韩三级| 久久久久久国产精品视频| 91视频在线观看免费| 国产精品嫩草影视| 久久国产一二区| 999久久欧美人妻一区二区| 亚洲人成亚洲精品| 亚洲影院色无极综合| 免费成人动漫| 欧美激情亚洲自拍| 男人天堂手机在线| 亚洲免费高清视频| 午夜老司机福利| 欧美性受极品xxxx喷水| 男人天堂中文字幕| 亚洲日本一区二区| 99精品欧美一区二区| 不卡视频在线观看| 超碰中文字幕在线观看| 亚洲一卡久久| 乱熟女高潮一区二区在线| 日韩1区2区| 国产伦精品一区二区三区照片91 | 日本高清不卡aⅴ免费网站| 青青青在线免费观看| 欧美激情一区二区三区| 国产精品福利导航| 国产99久久久国产精品潘金| 国产精品入口免费软件| 国产精品婷婷| 青青青在线视频播放| 在线中文字幕第一区| 日本电影一区二区三区| 亚洲97av| 精品1区2区| 动漫3d精品一区二区三区乱码| 成人黄色免费网站在线观看| 新片速递亚洲合集欧美合集| 91精品国产色综合久久不卡98| 精品孕妇一区二区三区| 色婷婷av一区二区三区在线观看| 日本不卡视频一区二区| 亚洲国产精品va| 日韩在线观看视频网站| 欧美xxxxx牲另类人与| 国产情人节一区| 国产高清中文字幕在线| 欧美精品激情blacked18| 成人av免费| 久久福利视频网| 国产日产一区二区三区| 久久精品成人一区二区三区 | 久久最新资源网| 日本激情视频在线观看| 日韩在线观看你懂的| av中文字幕一区二区三区| 在线视频欧美日韩精品| 波多野结衣在线网站| 一区二区欧美在线| 啊v在线视频| 最近2019中文字幕mv免费看 | 欧美精彩视频一区二区三区| x88av在线| 中文字幕欧美激情一区| 亚洲精品天堂网| 成人欧美一区二区三区白人 | 成人亲热视频网站| 久久av偷拍| 99久久综合狠狠综合久久止 | 欧美日韩精品免费看| 免费观看不卡av| 亚洲国产精品久久久久婷婷老年 | 中文字幕久久熟女蜜桃| 欧美日韩一区二区在线观看视频| 一级片在线免费观看视频| 欧美高清视频不卡网| 精品久久无码中文字幕| 亚洲国内精品视频| 噜噜噜在线观看播放视频| 在线播放国产精品| 欧美69xxx| 国模私拍视频一区| 亚洲播播91| 成人免费网站在线| 欧美亚视频在线中文字幕免费| 欧美影视一区二区| 亚洲影视一区二区三区| 国产中文字幕二区| 青青草成人在线观看| 精品人妻一区二区三| 欧美亚洲另类小说| 亚洲精品免费在线播放| 日韩成人高清视频| 欧美丝袜丝nylons| 亚洲经典一区二区三区| 亚洲人在线观看| 国产婷婷视频在线| 91精品国产成人| 日韩成人一区| 精品人伦一区二区三区| 日韩在线综合| 九九爱精品视频| 久久国产精品72免费观看| www.男人天堂| 日韩一区中文字幕| 五月天婷婷久久| 欧美喷水一区二区| 亚洲色欧美另类| 欧美成人sm免费视频| 日本美女一区| 成人欧美一区二区| 久久中文亚洲字幕| 无码播放一区二区三区| 国产精品一区二区久久不卡| 国产艳俗歌舞表演hd| 亚洲蜜臀av乱码久久精品蜜桃| 欧美特黄aaaaaa| 日韩三级精品电影久久久| 成人欧美亚洲| 欧美一区二区三区……| 亚洲精品在线播放| 裸体大乳女做爰69| 日本大胆欧美人术艺术动态| 黄色国产在线观看| 一区二区在线观看不卡| 亚洲一级视频在线观看| 亚洲精品一区中文字幕乱码| 毛片大全在线观看| 91网站在线看| 日韩av密桃| 天堂社区在线视频| 久久久三级国产网站| 久久不卡免费视频| 精品国产91洋老外米糕| 中文字幕中文字幕在线中高清免费版 | 午夜小视频福利在线观看| 国产精品一区二区性色av| 国产欧美日韩免费观看| 午夜精品久久久内射近拍高清| 99精品热视频| 五月天婷婷久久| 日韩精品免费综合视频在线播放 | 久久久亚洲国产精品| 久久69国产一区二区蜜臀| 免费视频91蜜桃| 日本韩国一区二区| 日产精品久久久久久久性色| 91精品成人久久| 日本亚洲不卡| 久久久999免费视频| 99久久免费国产| 日韩免费视频一区二区视频在线观看| 亚洲福利视频网| 三妻四妾完整版在线观看电视剧| 精品蜜桃一区二区三区| 亚洲专区一区二区三区| aaaaa一级片| 在线观看不卡视频| 91这里只有精品| 国产日韩欧美中文在线播放| 亚洲二区三区不卡| 岛国大片在线免费观看| 亚洲国产精品视频| 日韩a在线观看| 国产精品美女主播在线观看纯欲| 成人激情开心网| 伊人五月天婷婷| 亚洲最新视频在线播放| 日韩中文字幕免费观看| 欧美在线观看网站| 欧美一区二区性| 天天操精品视频| 午夜在线成人av| 粉嫩av在线播放| 成人免费视频a| 亚洲看片一区| 国产视频三区四区| 日韩欧美视频在线| 成人影院在线视频| 日韩影院一区| 偷拍中文亚洲欧美动漫| 精品一区电影国产| 全亚洲第一av番号网站| 亚洲亚洲精品三区日韩精品在线视频| 国内精品自线一区二区三区视频| 69精品久久久| 亚洲午夜激情免费视频| www欧美在线观看| 日日碰狠狠添天天爽超碰97| 欧美高清在线精品一区| 亚洲精品国产精品国| 欧美有码在线观看视频| 91精品一区国产高清在线gif| 香蕉视频免费网站| 欧美日韩在线综合| 韩国成人免费视频| 相泽南亚洲一区二区在线播放| 国产一区二区三区不卡在线观看| 成年人午夜视频| 日韩中文字幕网站| 香蕉久久精品日日躁夜夜躁| 一级淫片在线观看| 色综合天天视频在线观看| 欧洲性视频在线播放| 日韩av一级大片|