- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想对POST api进行功能测试。在该方法中,它将在生产环境中调用DynamoDB客户端。我已经启动了Docker容器供DynamoDB对其进行测试。但是,当我测试此代码时,它实际上调用了生产客户端DynamoDB。
router.HandleFunc("/v1/fxm/worklog", api.SaveFxmWorklog).Methods(PostMethod)
func SaveFxmWorklog(w http.ResponseWriter, r *http.Request) {
var rb entity.FxmWorklogDetails
err := json.NewDecoder(r.Body).Decode(&rb)
if err != nil {
log.Error().Err(err).Msgf("Failed to parse the fxm worklog request %s", util.ToJSON(rb))
util.ErrorResponse(w, err.Error(), http.StatusBadRequest)
return
}
log.Info().Msgf("Save fxm worklog request received for order %s", rb.OrderId)
response, err := service.FxmService.SaveFxmWorklogEvent(rb)
if err != nil {
log.Error().Err(err).Msgf("Failed to save fxm worklog event %s", util.ToJSON(rb))
util.ErrorResponse(w, err.Error(), http.StatusInternalServerError)
return
}
w.WriteHeader(response.HTTPStatusCode)
_ = json.NewEncoder(w).Encode(response)
}
var FxmService FxmWorklogService
type FxmWorklogService interface {
SaveFxmWorklogEvent(event entity.FxmWorklogDetails) (*response.BaseResponse, error)
}
type FxmWorklogServiceImpl struct {
fxmRepo fxm.Repository
}
func init() {
FxmService = FxmWorklogServiceImpl{fxmRepo: fxm.NewRepo()}
}
func (f FxmWorklogServiceImpl) SaveFxmWorklogEvent(event entity.FxmWorklogDetails) (*response.BaseResponse, error) {
err := f.fxmRepo.SaveFxmWorklogDetails(&event)
if err != nil {
log.Error().Err(err).Msgf("Failed to save fxm worklog event for order %s", event.OrderId)
return nil, err
}
return &response.BaseResponse{Status: util.SuccessStatusMessage, StatusCode: util.SuccessStatusCode, HTTPStatusCode: http.StatusOK}, nil
}
type Repository interface {
SaveFxmWorklogDetails(worklogDetails *entity.FxmWorklogDetails) error
UpdateFxmWorklogDetails(worklogDetails *entity.FxmWorklogDetails) error
GetEditOrderFxmWorklogDetails(orderId string) (*entity.FxmWorklogDetails, error)
}
var (
tableName = "delivery-assistance.fxm_worklog_events"
key = "orderId"
)
type Repo struct {
Db persistence.DBOperation
}
func NewRepo() *Repo {
return &Repo{Db: persistence.NewDB()}
}
func (r *Repo) SaveFxmWorklogDetails(worklogDetails *entity.FxmWorklogDetails) error {
return r.Db.PutItem(tableName, worklogDetails)
}
func (r *Repo) UpdateFxmWorklogDetails(worklogDetails *entity.FxmWorklogDetails) error {
return r.Db.PutItem(tableName, worklogDetails)
}
func (r *Repo) GetEditOrderFxmWorklogDetails(orderId string) (*entity.FxmWorklogDetails, error) {
var output []entity.FxmWorklogDetails
err := r.Db.GetItemsWithSameKeyAndStringValue(tableName, key, orderId, &output)
if err != nil {
log.Error().Err(err).Msgf("Failed to get fxm worklog details for order %s", orderId)
return nil, err
}
if len(output) > 0 {
for _, event := range output {
if event.Action == util.EditOrderAction && event.ExceptionName == util.EditOrderException {
return &event, nil
}
}
}
return nil, nil
}
// This struct extends the DBOperation interface for DynamoDB implementation
type DynamoDB struct {
client *dynamodb.DynamoDB
}
// DynamoDB Constructor
func NewDB() *DynamoDB {
return &DynamoDB{dynamodb2.Client()}
}
//This function Creates a new item, or replaces an old item with a new item.
func (db *DynamoDB) PutItem(tableName string, data interface{}) error {
av, err := dynamodbattribute.MarshalMap(data)
if err != nil {
log.Error().Err(err).Msgf("Failed to convert to attribute value %s", util.ToJSON(data))
return err
}
input := &dynamodb.PutItemInput{
Item: av,
TableName: aws.String(tableName),
}
log.Info().Msgf("Dynamo db endpoint: %d", db.client.Endpoint)
_, err = db.client.PutItem(input)
if err != nil {
log.Error().Err(err).Msgf("Error calling put item")
return err
}
return nil
}
var (
client *dynamodb.DynamoDB
)
func init() {
sess, err := session.NewSession(&aws.Config{
Region: aws.String(config.Client.GetString("AWS_CREDS.region")),
Credentials: credentials.NewStaticCredentialsFromCreds(credentials.Value{
AccessKeyID: config.Client.GetString("AWS_CREDS.access_key_id"),
SecretAccessKey: config.Client.GetString("AWS_CREDS.secret_access_key"),
}),
Endpoint: aws.String(config.Client.GetString("AWS_CREDS.endpoint")),
})
if err != nil {
log.Error().Err(err).Msgf("Failed to connect to aws")
}
client = dynamodb.New(sess)
}
func Client() *dynamodb.DynamoDB {
return client
}
func Test_Functional_Managers(t *testing.T) {
if testing.Short() {
t.Skip("Skipping Functional Test")
return
}
testContainers, err := util.SetupContainers()
if err != nil {
t.Errorf("ErrorInitializing Container, error = %v", err)
}
log.Info().Msgf("http://%s:%s", testContainers.Dynamo.Host(), testContainers.Dynamo.Port())
SaveFxmWorklogTest(t, testContainers)
}
func SaveFxmWorklogTest(t *testing.T, containers *util.Containers) {
var FxmWorklogDetails = `{"orderId":"1231","worklogType":"RECOVERY","businessLine":"Food","serviceLine":"FOOD","action":"ORDER_EDIT","exceptionName":"ITEM_OUT_OF_STOCK","system":"VENDOR","subSystem":"Delivery","createdAt":1234567890}`
var r io.Reader
r = strings.NewReader(FxmWorklogDetails)
url := fmt.Sprintf("http://%s:%s", containers.Dynamo.Host(), containers.Dynamo.Port())
config.Client.SetString("AWS_CREDS.access_key_id", "random")
config.Client.SetString("AWS_CREDS.secret_access_key", "random")
config.Client.SetString("AWS_CREDS.endpoint", url)
if err := containers.Dynamo.CreateTable(test_data.CreateTableRequest); err != nil {
t.Errorf("Error Creating table, err = %v", err)
}
req, _ := http.NewRequest("POST", "/v1/fxm/worklog", r)
w := httptest.NewRecorder()
api.SaveFxmWorklog(w, req)
}
type Containers struct {
Dynamo *dynamo.Dynamo
}
func SetupContainers() (*Containers, error) {
dynamoContainer, err := dynamo.NewContainer()
if err != nil {
return nil, err
}
return &Containers{
Dynamo: dynamoContainer,
}, nil
}
=== RUN Test_Functional_Managers
2020/06/12 13:21:35 Starting container id: 5a987112c28d image: quay.io/testcontainers/ryuk:0.2.3
2020/06/12 13:21:35 Waiting for container id 5a987112c28d image: quay.io/testcontainers/ryuk:0.2.3
2020/06/12 13:21:35 Container is ready id: 5a987112c28d image: quay.io/testcontainers/ryuk:0.2.3
2020/06/12 13:21:35 Starting container id: 691016e5a216 image: amazon/dynamodb-local
2020/06/12 13:21:35 Waiting for container id 691016e5a216 image: amazon/dynamodb-local
2020/06/12 13:21:36 Container is ready id: 691016e5a216 image: amazon/dynamodb-local
{"level":"info","time":"2020-06-12T13:21:36+05:30","message":"http://localhost:32773"}
{"level":"info","time":"2020-06-12T13:21:37+05:30","message":"Endpoint: http://localhost:32773"}
{"level":"info","time":"2020-06-12T13:21:37+05:30","message":"Save fxm worklog request received for order 1231"}
{"level":"info","time":"2020-06-12T13:21:37+05:30","message":"Dynamo db endpoint: %!d(string=http://dynamodb.ap-southeast-1.amazonaws.com)"}
{"level":"error","error":"ResourceNotFoundException: Requested resource not found","time":"2020-06-12T13:21:37+05:30","message":"Error calling put item"}
{"level":"error","error":"ResourceNotFoundException: Requested resource not found","time":"2020-06-12T13:21:37+05:30","message":"Failed to save fxm worklog event for order 1231"}
{"level":"error","error":"ResourceNotFoundException: Requested resource not found","time":"2020-06-12T13:21:37+05:30","message":"Failed to save fxm worklog event {\"orderId\":\"1231\",\"worklogType\":\"RECOVERY\",\"businessLine\":\"Food\",\"serviceLine\":\"FOOD\",\"action\":\"ORDER_EDIT\",\"exceptionName\":\"ITEM_OUT_OF_STOCK\",\"system\":\"VENDOR\",\"subSystem\":\"Delivery\",\"createdAt\":1234567890}"}
--- PASS: Test_Functional_Managers (2.10s)
PASS
最佳答案
如果程序包中不存在,则可以实现TestMain(m * testing.M)函数,并更改AWS的凭证:
func TestMain(m *testing.M) {
sess, err := session.NewSession(&aws.Config{
Region: aws.String(config.Client.GetString("AWS_CREDS_TEST.region")),
Credentials: credentials.NewStaticCredentialsFromCreds(credentials.Value{
AccessKeyID: config.Client.GetString("AWS_CREDS_TEST.access_key_id"),
SecretAccessKey: config.Client.GetString("AWS_CREDS_TEST.secret_access_key"),
}),
Endpoint: aws.String(config.Client.GetString("AWS_CREDS_TEST.endpoint")),
})
if err != nil {
log.Error().Err(err).Msgf("Failed to connect to aws")
}
client = dynamodb.New(sess)
exitVal := m.Run()
os.Exit(exitVal)
}
关于go - 如何使用dynamodb数据库进行API功能测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62360435/
我的问题是如何在 python 中创建一个简单的数据库。我的例子是: User = { 'Name' : {'Firstname', 'Lastname'}, 'Address' : {'Street
我需要创建一个与远程数据库链接的应用程序! mysql 是最好的解决方案吗? Sqlite 是唯一的本地解决方案吗? 我使用下面的方法,我想知道它是否是最好的方法! NSString *evento
给定两台 MySQL 服务器,一台本地,一台远程。两者都有一个包含表 bohica 的数据库 foobar。本地服务器定义了用户 'myadmin'@'%' 和 'myadmin'@'localhos
我有以下灵活的搜索查询 Select {vt:code},{vt:productcode},{vw:code},{vw:productcode} from {abcd AS vt JOIN wxyz
好吧,我的电脑开始运行有点缓慢,所以我重置了 Windows,保留了我的文件。因为我的大脑还没有打开,所以我忘记事先备份我的 MySQL 数据库。我仍然拥有所有原始文件,因此我实际上仍然拥有数据库,但
如何将我的 Access 数据库 (.accdb) 转换为 SQLite 数据库 (.sqlite)? 请,任何帮助将不胜感激。 最佳答案 1)如果要转换 db 的结构,则应使用任何 DB 建模工具:
系统检查发现了一些问题: 警告:?:(mysql.W002)未为数据库连接“默认”设置 MySQL 严格模式 提示:MySQL 的严格模式通过将警告升级为错误来修复 MySQL 中的许多数据完整性问题
系统检查发现了一些问题: 警告:?:(mysql.W002)未为数据库连接“默认”设置 MySQL 严格模式 提示:MySQL 的严格模式通过将警告升级为错误来修复 MySQL 中的许多数据完整性问题
我想在相同的 phonegap 应用程序中使用 android 数据库。 更多说明: 我创建了 phonegap 应用程序,但 phonegap 应用程序不支持服务,所以我们已经在 java 中为 a
Time Tracker function clock() { var mytime = new Date(); var seconds
我需要在现有项目上实现一些事件的显示。我无法更改数据库结构。 在我的 Controller 中,我(从 ajax 请求)传递了一个时间戳,并且我需要显示之前的 8 个事件。因此,如果时间戳是(转换后)
我有一个可以收集和显示各种测量值的产品(不会详细介绍)。正如人们所期望的那样,显示部分是一个数据库+建立在其之上的网站(使用 Symfony)。 但是,我们可能还会创建一个 API 来向第三方公开数据
我们将 SQL Server 从 Azure VM 迁移到 Azure SQL 数据库。 Azure VM 为 DS2_V2、2 核、7GB RAM、最大 6400 IOPS Azure SQL 数据
我正在开发一个使用 MongoDB 数据库的程序,但我想问在通过 Java 执行 SQL 时是否可以使用内部数据库进行测试,例如 H2? 最佳答案 你可以尝试使用Testcontainers Test
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 此问题似乎与 a specific programming problem, a sof
我正在尝试使用 MSI 身份验证(无需用户名和密码)从 Azure 机器学习服务连接 Azure SQL 数据库。 我正在尝试在 Azure 机器学习服务上建立机器学习模型,目的是我需要数据,这就是我
我在我的 MySQL 数据库中使用这个查询来查找 my_column 不为空的所有行: SELECT * FROM my_table WHERE my_column != ""; 不幸的是,许多行在
我有那个基地:http://sqlfiddle.com/#!2/e5a24/2这是 WordPress 默认模式的简写。我已经删除了该示例不需要的字段。 如您所见,我的结果是“类别 1”的两倍。我喜欢
我有一张这样的 table : mysql> select * from users; +--------+----------+------------+-----------+ | userid
我有表: CREATE TABLE IF NOT EXISTS `category` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL
我是一名优秀的程序员,十分优秀!