# Rust ტესტების დაშლა {#rust-test-sharding}

Tuist ნაწილობრივ ანაწილებს Cargo-ს ტესტის სამიზნეებს CI მუშაკებზე ისტორიული სამიზნე ხანგრძლივობების გამოყენებით. იუნით-ტესტის სამიზნეები, ინტეგრაციის ტესტის სამიზნეები და თითოეული ბიბლიოთეკის doctests ცალკე მოდულებია. ერთი სამიზნის ფარგლებში არსებული ტესტები ერთად რჩება.

> [!IMPORTANT] Requirements
> - მოახდინეთ კონფიგურაცია <.localized_link href="/guides/features/test-insights/rust">Rust Test Insights</.localized_link> და გაიარეთ CLI-ის ავტორიზაცია დაგეგმვის სამუშაოზე და მუშაკებზე.
> - აირჩიეთ ერთი პაკეტი, გამოიყენეთ `-p <package>` სამუშაო სივრცეში. მრავალი პაკეტის დაშლა არ არის მხარდაჭერილი.
> - გამოიყენეთ იგივე რევიზია, Rust-ის ინსტრუმენტების ჯაჭვი, პაკეტის შერჩევა, ფუნქციები და ტესტის ფილტრები ყოველ სამუშაოში.

## გეგმის შექმნა {#create-a-plan}

დაამატეთ ნაწილების რაოდენობა `--no-run`-ს, რათა მოახდინოთ კომპილაცია და ჩამოთვალოთ სამიზნეები ტესტების შესრულების გარეშე:

```sh
TUIST_SHARD_REFERENCE=my-ci-run tuist cargo test -p store --no-run --shard-max 4
```

ბრძანება ბეჭდავს JSON-ს, რომელიც შეიცავს `shard_plan_id`-ს და ნულოვანი ინდექსაციის `shards` მასივს. GitHub Actions-ში, ის ასევე წერს `shard-plan-id`-ს და `shards`-ს `GITHUB_OUTPUT`-ში. ცალსახა მითითების გარეშე, Tuist იღებს მას მხარდაჭერილი CI გარემოდან.

| პარამეტრი | აღწერა |
| --- | --- |
| `--shard-max N` | ნაწილების მაქსიმალური რაოდენობა |
| `--shard-min N` | ნაწილების მინიმალური რაოდენობა |
| `--shard-total N` | ზუსტი რაოდენობა, ხელმისაწვდომი სამიზნეების ფარგლებში |
| `--shard-max-duration N` | სამიზნე ნაწილის მაქსიმალური ხანგრძლივობა მილიწამებში |

გამოიყენეთ `--shard-total` ცალკე ან გააერთიანეთ `--shard-min` და `--shard-max`. ისტორიული ხანგრძლივობების გარეშე, დამგეგმავი იყენებს სამიზნეების ნაგულისხმევ შეფასებებს. ჩვეულებრივი `--no-run` ნაწილების პარამეტრების გარეშე რჩება მხოლოდ აგების ბრძანებად.

## ყოველი ნაწილის შესრულება {#execute-each-shard}

დააყენეთ გეგმის ID და ნაწილის ინდექსი თითოეულ მუშაკზე, შემდეგ გამოიყენეთ იგივე Cargo ტესტის არგუმენტები:

```sh
TUIST_SHARD_PLAN_ID=<plan-id> TUIST_SHARD_INDEX=0 tuist cargo test -p store
```

ალტერნატიულად, დააყენეთ `TUIST_SHARD_REFERENCE` დაგეგმვის სამუშაოს მითითებაზე გეგმის ID-ის გადაცემის ნაცვლად. Tuist იღებს განაწილებას და სთხოვს Cargo-ს შეასრულოს მხოლოდ ეს სამიზნეები. არასწორი ან შეუთავსებელი განაწილებები აუქმებს ბრძანებას ყველა ტესტის შესრულების ნაცვლად. ცარიელი განაწილებები არ ასრულებს ტესტებს. მუშაკების შედეგები დაკავშირებულია გეგმასთან Test Insights-ში და <.localized_link href="/guides/features/test-insights/flaky-tests/rust#quarantine">კარანტინი</.localized_link> ვრცელდება თითოეულ ნაწილში.

## შეზღუდვები {#limits}

ეს არის სამიზნე დონის დაშლა, არა ერთჯერადი აგების განაწილება. თითოეულ მუშაკს სჭირდება წყაროს კოდი და აგებს საკუთარ სამიზნეებს; <.localized_link href="/guides/features/cache/rust">Cargo კომპილაციის ქეში</.localized_link> შეუძლია ხელახლა გამოიყენოს შესაბამისი კომპილაციის შედეგები. Tuist არ ტვირთავს ტესტის შესრულებად ფაილებს და არ ითხოვს სხვა Rust ტესტის გამშვებს.

დაშლა მოითხოვს ერთ არჩეულ პაკეტს. მრავალპაკეტიანი ბრძანების შევიწროვებამ შეიძლება შეცვალოს Cargo-ს გაერთიანებული დამოკიდებულების ფუნქციები, ამიტომ Tuist უარყოფს მას ტესტების სხვა ფუნქციების გრაფით შესრულების ნაცვლად. დაგეგმეთ თითოეული პაკეტი ცალკე, სანამ მრავალპაკეტიანი დაშლა არ იქნება მხარდაჭერილი.

დაშლა მოითხოვს სტანდარტულ libtest harness-ებს და ჩაჭერილ ნაგულისხმევ გამოტანას. ჩუმი, ვრცელი, ალტერნატიული ფორმატის, არაჩაჭერილი გამოტანის და მორგებული harness-ის ბრძანებები უარყოფილია. თუ Cargo ვერ ახდენს სამიზნის ცალსახა იდენტიფიცირებას, აირჩიეთ ზუსტი სამუშაო სივრცის პაკეტი `-p <package>`-ით. დამოკიდებულების პაკეტები, ვერსიით კვალიფიცირებული სელექტორები, პაკეტის/სამიზნის სახელის გლობები და Cargo-ს ღამის `-C` პარამეტრი არ არის მხარდაჭერილი დაშლისთვის. შეინარჩუნეთ ტესტის შერჩევა იდენტური დაგეგმვასა და შესრულებას შორის.
