Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add faker to variable #169

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions README-ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,29 @@ password=private_password

env-файл, например, удобно использовать, когда нужно вынести из теста приватную информацию (пароли, ключи и т.п.)

### Faker

Если вам нужны рандомные данные при тестах, можно использовать faker. В значении переменной указываем faker и через точку нужный тип данных, например UUID: `faker.uuid`.
С полным списком данных можно ознакомится [здесь](https://github.com/neotoolkit/faker)

```yaml
- method: "{{ $method }}"
path: "/some/path/{{ $pathPart }}"
variables:
reqParam: "faker.uuid" // UUID
method: "POST"
pathPart: "part_of_path"
query: "query_val"
header: "header_val"
resp: "resp_val"
query: "{{ $query }}"
headers:
header1: "{{ $header }}"
request: '{"reqParam": "{{ $reqParam }}"}'
response:
200: "{{ $resp }}"
```

## Загрузка файлов

В тестовом запросе можно загружать файлы. Для этого нужно указать тип запроса - POST и заголовок:
Expand Down
28 changes: 28 additions & 0 deletions faker/faker.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package faker

import (
"strings"

"github.com/neotoolkit/faker"
)

func Faker(value string) string {
key := getFakerKey(value)

f := faker.NewFaker()

return f.Faker(key)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мне не нравится, что вот тут может быть паника https://github.com/neotoolkit/faker/blob/main/faker.go#L348

По хорошему лучше чтобы была ошибка и ее можно было нормально отобразить в логе, а не сломать весь процесс выполнения тестов.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И история с псевдо-callable обьектами внутри шаблона наверное так не должна обрабатываться.
Это выглядит как супер неочевидный код.

У нас внутри есть задача на замену неполного шаблонизатора в gonkey на полноценный text/template, что по идее должно будет решать подобные проблемы проще.

@vitkarpenko FYI

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Заменю панику на обработку ошибки

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю тогда скооперироваться. Я дополню библиотеку нужными данными и сценариями. И когда перейдете на text/template - внедрим все. Сейчас некоторые вещи конечно не очень очевидные, поэтому для концепта пришлось сделать подобное. В шаблонах конечно было бы проще, просто передать фейкер как функцию в шаблон

}

func getFakerKey(value string) string {
splitValue := strings.Split(value, "$faker")
if len(splitValue) == 1 {
return ""
}

if splitValue[0] != "" {
return ""
}

return strings.ToLower(splitValue[1])
}
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ require (
github.com/lib/pq v1.3.0
github.com/mattn/go-colorable v0.1.12 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/neotoolkit/faker v0.5.1
github.com/stretchr/testify v1.7.1
github.com/tidwall/gjson v1.13.0
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HK
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/neotoolkit/faker v0.4.0 h1:VUMy17VphdLXSWU5L1Aevv+KrElckJQ2PG+bYUGu4YY=
github.com/neotoolkit/faker v0.4.0/go.mod h1:xo8gPYed0+xG7RQHV3wwKMyE4i0wkMMjNoyxjihgWno=
github.com/neotoolkit/faker v0.5.1 h1:i8n53MeGBmnGuyC2QZGa3qAhjxuz0pSRUBeXFXZFVK0=
github.com/neotoolkit/faker v0.5.1/go.mod h1:xo8gPYed0+xG7RQHV3wwKMyE4i0wkMMjNoyxjihgWno=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
Expand Down
7 changes: 7 additions & 0 deletions variables/variable.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import (
"fmt"
"os"
"regexp"
"strings"

"github.com/lamoda/gonkey/faker"
)

type Variable struct {
Expand All @@ -19,6 +22,10 @@ func NewVariable(name, value string) *Variable {
name = regexp.QuoteMeta(name)
rx := regexp.MustCompile(fmt.Sprintf(`{{\s*\$%s\s*}}`, name))

if strings.HasPrefix(value, "$faker") {
value = faker.Faker(value)
}

return &Variable{
name: name,
value: value,
Expand Down